Udostępnij za pośrednictwem


Tworzenie, testowanie i wdrażanie aplikacji platformy .NET Core

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Użyj usługi Azure Pipeline, aby automatycznie kompilować, testować i wdrażać projekty platformy .NET Core. W tym artykule przedstawiono sposób wykonywania następujących zadań:

Uwaga

Aby uzyskać pomoc dotyczącą projektów .NET Framework, zobacz Tworzenie aplikacji ASP.NET za pomocą programu .NET Framework.

Wymagania wstępne

  • Konto usługi GitHub, na którym można utworzyć repozytorium. Utwórz je bezpłatnie.
  • Kolekcja usługi Azure DevOps.
  • Możliwość uruchamiania potoków na własnym agencie z zainstalowanym i działającym na hoście agenta środowiskiem Docker.

Stwórz swój pierwszy potok

Jesteś nowym użytkownikiem usługi Azure Pipelines? Jeśli tak, zalecamy najpierw wypróbowanie poniższej sekcji.

Tworzenie projektu platformy .NET

Jeśli nie masz projektu platformy .NET do pracy, utwórz nowy w systemie lokalnym. Zacznij od zainstalowania najnowszego zestawu .NET 8.0 SDK .

  1. Otwórz okno terminalu.

  2. Utwórz katalog projektu i przejdź do niego.

  3. Utwórz nową aplikację internetową platformy .NET 8.

    dotnet new webapp -f net8.0
    
  4. W tej samej sesji terminalu uruchom aplikację lokalnie przy użyciu dotnet run polecenia z katalogu projektu.

    dotnet run
    
  5. Po uruchomieniu aplikacji naciśnij Ctrl-C, aby ją zamknąć.

Tworzenie repozytorium Git i łączenie go z usługą GitHub

  1. W katalogu projektu utwórz lokalne repozytorium git i zatwierdź kod aplikacji do gałęzi głównej.

  2. Połącz lokalne repozytorium Git z repozytorium GitHub.

Tworzenie projektu DevOps

Zaloguj się do usługi Azure Pipelines. Po zalogowaniu przeglądarka przejdzie do https://dev.azure.com/my-organization-name pulpitu nawigacyjnego usługi Azure DevOps i wyświetli go.

  1. W przeglądarce przejdź do dev.azure.com i zaloguj się.
  2. Wybierz organizację.
  3. Utwórz nowy projekt, wybierając pozycję Nowy projekt lub Utwórz projekt , tworząc pierwszy projekt w organizacji.
  4. Wprowadź nazwę projektu.
  5. Wybierz widoczność projektu.
  6. Wybierz pozycję Utwórz.
  1. W przeglądarce przejdź do serwera Usługi Azure DevOps.
  2. Wybierz kolekcję.
  3. Utwórz nowy projekt, wybierając pozycję Nowy projekt lub Utwórz projekt , tworząc pierwszy projekt w kolekcji.
  4. Wprowadź nazwę projektu.
  5. Wybierz widoczność projektu.
  6. Wybierz pozycję Utwórz.
  1. W oknie przeglądarki zaloguj się do serwera Usługi Azure DevOps i wybierz kolekcję.
  2. Wybierz pozycję Nowy projekt.
  3. Wprowadź nazwę projektu.
  4. Możesz również wprowadzić opis.
  5. Wybierz pozycję Utwórz.

Konfigurowanie środowiska kompilacji

Kompilacje są uruchamiane na samohostowanych agentach. Upewnij się, że masz wymaganą wersję zestawu .NET Core SDK i środowiska uruchomieniowego zainstalowanego na agentach. Projekty platformy .NET Core można tworzyć przy użyciu zestawu .NET Core SDK i środowiska uruchomieniowego w systemach Windows, Linux, macOS i Docker.

Możesz zainstalować określoną wersję zestawu .NET SDK, dodając zadanie UseDotNet@2 w pliku YAML potoku lub korzystając z edytora klasycznego, aby dodać zadanie do potoku.

Przykładowy fragment kodu YAML:

steps:
- task: UseDotNet@2
  inputs:
    version: '8.x'

Kompilacje są uruchamiane na agentach hostowanych przez firmę Microsoft. Projekty platformy .NET Core można tworzyć przy użyciu zestawu .NET Core SDK i środowiska uruchomieniowego w systemach Windows, Linux i macOS.

Alternatywnie możesz użyć agenta hostowanego lokalnie. Korzystając z własnego agenta, możesz użyć zestawów SDK w wersji zapoznawczej lub prywatnych, które nie są oficjalnie obsługiwane przez usługi Azure DevOps Services i uruchamiać kompilacje przyrostowe.

Utwórz swój potok

Do utworzenia potoku można użyć edytora potoku YAML lub edytora klasycznego. Aby użyć edytora klasycznego, wybierz pozycję Użyj edytora klasycznego.

Utwórz nowy potok i wybierz źródło
  1. Zaloguj się do organizacji usługi Azure DevOps i przejdź do projektu.

  2. Przejdź do obszaru Potoki, a następnie wybierz pozycję Nowy potok lub Utwórz potok , jeśli tworzysz pierwszy potok.

  3. Wykonaj kroki kreatora, najpierw wybierając GitHub jako lokalizację twojego kodu źródłowego.

  4. Być może nastąpi przekierowanie do usługi GitHub w celu zalogowania się. Jeśli tak, wprowadź swoje dane logowania do GitHub.

  5. Po wyświetleniu listy repozytoriów wybierz repozytorium.

  6. Możesz zostać przekierowany do usługi GitHub, aby zainstalować aplikację Azure Pipelines. Jeśli tak, wybierz pozycję Zatwierdź i zainstaluj.

Skonfiguruj swój potok
  1. Po wyświetleniu karty Konfiguracja kliknij Pokaż więcej i wybierz szablon potoku ASP.NET Core z listy.

  2. Sprawdź nowy pipeline, aby zrozumieć, co robi YAML.

Plik YAML można dostosować pod kątem wymagań. Można na przykład określić pulę agentów lub dodać zadanie do zainstalowania innego zestawu .NET SDK.

Zapisz i uruchom potok
  1. Gdy wszystko będzie gotowe, wybierz pozycję Zapisz i uruchom.

    Przycisk Zapisz i uruchom w nowym potoku YAML

  2. Opcjonalnie możesz edytować komunikat zatwierdzenia.

  3. Zatwierdź nowy plik azure-pipelines.yml do repozytorium, wybierając pozycję Zapisz i uruchom.

  4. Aby obejrzeć przepływ w akcji, wybierz zadanie w sekcji Praca.

Utwórz i uruchom swój potok

Potok można utworzyć przy użyciu edytora potoku YAML lub edytora klasycznego.

  1. Przejdź do projektu i wybierz Pipelines.
  2. Wybierz pozycję Utwórz potok lub Nowy potok , jeśli utworzysz pierwszy potok dla tego projektu.
Wybierz źródło
  1. Wybierz repozytorium źródłowe. W tym przykładzie użyj usługi GitHub Enterprise Server.

    1. Wprowadź adres URL konta usługi GitHub. Na przykład https://github.com/<username>.
    2. Wprowadź osobisty token dostępu dla konta usługi GitHub.
    3. Wprowadź nazwę połączenia z usługą. Na przykład my-github.
    4. Wybierz pozycję Utwórz.
  2. Wybierz repozytorium GitHub.

Skonfiguruj swój potok
  1. Na karcie Konfigurowanie wybierz pozycję Pokaż więcej i wybierz szablon potoku ASP.NET Core z listy.

  2. Sprawdź nowy pipeline, żeby zobaczyć, co robi YAML.

Plik YAML można dostosować pod kątem wymagań. Możesz na przykład dodać zadania, aby zainstalować zestaw .NET SDK lub przetestować i opublikować projekt.

Zapisz i uruchom swój potok
  1. Wybierz pozycję Zapisz i uruchom.

    Zrzut ekranu przedstawiający przycisk Zapisz i Uruchom w nowym pipeline YAML.

  2. Aby zatwierdzić nowy plik azure-pipelines.yml w repozytorium, zmodyfikuj komunikat zatwierdzenia zgodnie z potrzebami i wybierz pozycję Zapisz i uruchom.

Aby obejrzeć pipeline w akcji, wybierz zadanie w sekcji Zadania.

Masz teraz działający potok danych, który jest gotowy do personalizacji. Przeczytaj dalej, aby poznać typowe sposoby dostosowywania rurki.

Środowisko kompilacji

Usługa Azure Pipelines używa własnych agentów do tworzenia projektów platformy .NET Core. Upewnij się, że masz wymaganą wersję zestawu .NET Core SDK i środowiska uruchomieniowego zainstalowanego na agentach. Projekty platformy .NET Core można tworzyć przy użyciu zestawu .NET Core SDK i środowiska uruchomieniowego w systemach Windows, Linux, macOS i Docker.

Na przykład, aby wybrać pulę i funkcje agenta w pliku YAML potoku:

Możesz wybrać pulę agentów i agenta na potrzeby zadania budowania. Agenci są określeni na podstawie ich możliwości.

pool:
  name: myPrivateAgents
  demands:
  - agent.os -equals Darwin
  - anotherCapability -equals somethingElse

Możesz zainstalować określoną wersję zestawu .NET SDK, dodając w potoku zadanie UseDotNet@2. Należy pamiętać, że w przypadku agentów działających na systemach fizycznych instalacja zestawów SDK i narzędzi za pośrednictwem potoku zmienia środowisko kompilacji na hoście agenta.

Aby zainstalować nowszy zestaw SDK, ustaw performMultiLevelLookup na true w następującym fragmencie:

steps:
- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 8.x
    performMultiLevelLookup: true
    includePreviewVersions: true # Required for preview versions

Za pomocą usługi Azure Pipelines można tworzyć projekty platformy .NET Core w systemach Windows, Linux lub macOS bez konieczności konfigurowania infrastruktury.

Na przykład Ubuntu jest ustawione tutaj w pliku YAML dla potoku.

pool:
  vmImage: 'ubuntu-latest' 

Zobacz Agenci hostowani przez firmę Microsoft, aby uzyskać pełną listę obrazów i dalsze przykłady konfiguracji.

Agenci hostowani przez firmę Microsoft w usłudze Azure Pipelines obejmują kilka wstępnie zainstalowanych wersji obsługiwanych zestawów SDK platformy .NET Core. Agenci hostowani przez firmę Microsoft nie obejmują niektórych starszych wersji zestawu .NET Core SDK. Zazwyczaj nie zawierają one również wersji wstępnych. Jeśli potrzebujesz tych wersji zestawu SDK na agentach hostowanych przez firmę Microsoft, zainstaluj je przy użyciu zadania UseDotNet@2 .

Aby na przykład zainstalować zestaw SDK 5.0.x, dodaj następujący fragment kodu:

steps:
- task: UseDotNet@2
  inputs:
    version: '5.x'

Agenci systemu Windows zawierają już środowisko uruchomieniowe platformy .NET Core. Aby zainstalować nowszy zestaw SDK, ustaw performMultiLevelLookup na true w następującym fragmencie:

steps:
- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 8.x
    performMultiLevelLookup: true
    includePreviewVersions: true # Required for preview versions

Napiwek

Aby zaoszczędzić koszty uruchamiania instalatora narzędzi, możesz skonfigurować własnego agenta systemu Linux, macOS lub Windows. Możesz również użyć własnych agentów, aby zaoszczędzić dodatkowy czas, jeśli masz duże repozytorium lub uruchamiasz kompilacje przyrostowe. Własny agent może również pomóc w korzystaniu z zestawów SDK w wersji zapoznawczej lub prywatnych, które nie są oficjalnie obsługiwane przez usługę Azure DevOps lub są dostępne tylko w środowiskach firmowych lub lokalnych.

Przywracanie zależności

NuGet to popularny sposób, aby zależeć od kodu, którego nie kompilujesz. Pakiety NuGet oraz narzędzia specyficzne dla projektu, określone w pliku projektu, można pobrać poprzez uruchomienie polecenia dotnet restore za pomocą zadania .NET Core lub bezpośrednio w skrypcie w potoku. Aby uzyskać więcej informacji, zobacz .NET Core task (DotNetCoreCLI@2).

Pakiety NuGet można pobrać z usługi Azure Artifacts, NuGet.org lub innego zewnętrznego lub wewnętrznego repozytorium NuGet. Zadanie platformy .NET Core jest szczególnie przydatne do przywracania pakietów z uwierzytelnionych źródeł danych NuGet. Jeśli kanał znajduje się w tym samym projekcie co pipeline, nie trzeba się uwierzytelniać.

Ten potok używa źródła danych usługi Azure Artifact dla dotnet restore zadania DotNetCoreCLI@2 .

trigger:
- main

pool:
  vmImage: 'windows-latest'

steps:
- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 8.x
    performMultiLevelLookup: true
    includePreviewVersions: true # Required for preview versions

variables:
  buildConfiguration: 'Release'

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'restore'
    feedsToUse: 'select'
    vstsFeed: 'my-vsts-feed' # A series of numbers and letters

- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    arguments: '--configuration $(buildConfiguration)'
  displayName: 'dotnet build $(buildConfiguration)'

Polecenie dotnet restore używa NuGet.exe dostarczanego z zestawem .NET Core SDK i może przywracać tylko pakiety określone w plikach projektu .csproj .NET Core.

Jeśli masz również projekt Microsoft .NET Framework w swoim rozwiązaniu lub korzystasz z polecenia package.json, aby określić swoje zależności, przywróć je za pomocą NuGet.

- task: NuGetCommand@2
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'select'

Uwaga

Jeśli używasz systemu Ubuntu 24.04 lub nowszego, musisz użyć zadania NuGetAuthenticate z interfejsem wiersza polecenia platformy .NET zamiast zadania NuGetCommand@2. Aby uzyskać więcej informacji, zobacz Support for newer Ubuntu hosted images (Obsługa nowszych obrazów hostowanych w systemie Ubuntu).

W zestawie .NET Core SDK w wersji 2.0 i nowszej pakiety są przywracane automatycznie podczas uruchamiania poleceń, takich jak dotnet build. Jednak nadal trzeba użyć zadania .NET Core, aby przywrócić pakiety, jeśli używasz uwierzytelnionego źródła danych.

Kompilacje mogą zakończyć się niepowodzeniem z powodu problemów z połączeniem podczas przywracania pakietów z NuGet.org. Do buforowania pakietów można użyć usługi Azure Artifacts z nadrzędnymi źródłami . Poświadczenia potoku są automatycznie używane podczas nawiązywania połączenia z usługą Azure Artifacts. Te poświadczenia są zwykle pochodzące z konta usługi Project Collection Build Service . Aby dowiedzieć się więcej na temat używania usługi Azure Artifacts do buforowania pakietów NuGet, zobacz Nawiązywanie połączenia z źródłami danych usługi Azure Artifact.

Aby określić repozytorium NuGet, umieść adres URL w NuGet.config pliku w repozytorium. Jeśli źródło danych jest uwierzytelnione, zarządzaj jego poświadczeniami, tworząc połączenie usługi NuGet w karcie Usługi w obszarze Ustawienia projektu.

W przypadku korzystania z agentów hostowanych przez firmę Microsoft otrzymujesz nową maszynę za każdym razem, gdy uruchamiasz kompilację, która przywraca pakiety przy każdym uruchomieniu. Przywracanie może zająć znaczną ilość czasu. Aby złagodzić ten problem, możesz skorzystać z usługi Azure Artifacts lub użyć własnego agenta, który zapewnia korzyść z korzystania z pamięci podręcznej pakietów.

Aby uzyskać więcej informacji na temat połączeń usługi NuGet, zobacz publikowanie w kanałach NuGet.

Przywracanie pakietów z zewnętrznego źródła danych

Wykonaj następujące czynności, aby przywrócić pakiety z zewnętrznego źródła danych.

Możesz dodać polecenie przywracania do potoku za pomocą edytora potoków YAML, bezpośrednio wstawiając poniższy fragment kodu do azure-pipelines.yml pliku lub używając asystenta zadań w celu dodania zadania .NET Core.

# do this before your build tasks
steps:
- task: DotNetCoreCLI@2
  displayName: Restore
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: config
    nugetConfigPath: NuGet.config    # Relative to root of the repository
    externalFeedCredentials: <Name of the NuGet service connection>

Zastąp <symbol zastępczy> nazwą połączenia usługi.

Aby użyć asystenta zadań:

Aby dodać zadanie kompilacji przy użyciu asystenta zadań, wykonaj następujące czynności:

  1. Przejdź do pozycji w pliku YAML, w którym chcesz wstawić zadanie.

  2. Wybierz platformę .NET Core z katalogu zadań.

  3. Wybierz polecenie przywracania z listy rozwijanej Polecenie.

  4. W polu Ścieżka do projektów wprowadź ścieżkę do .csproj plików.

  5. Wybierz Dodaj.

  6. Wybierz pozycję Zapisz , aby zatwierdzić zmianę.

Uwaga

Upewnij się, że niestandardowe źródło danych jest określone w pliku NuGet.config i że poświadczenia są podane w połączeniu usługi NuGet.

Zbuduj swój projekt

Skompiluj projekty platformy .NET Core, uruchamiając polecenie dotnet build. Polecenie można dodać do potoku jako skrypt w wierszu poleceń lub za pomocą zadania .NET Core.

Kompilacja .NET Core za pomocą zadania .NET Core

Przykład yaML do skompilowania przy użyciu zadania DotNetCoreCLI@2:

steps:
- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '**/*.csproj'
    arguments: '--configuration $(buildConfiguration)' # Update this to match your needs

Zadanie kompilacji można dodać przy użyciu edytora potoku YAML, bezpośrednio edytując plik lub dodając zadanie platformy .NET Core przy użyciu asystenta zadań.

Aby dodać zadanie kompilacji przy użyciu asystenta zadań, wykonaj następujące czynności:

  1. Przejdź do pozycji w pliku YAML, w którym chcesz wstawić zadanie.

  2. Wybierz platformę .NET Core z katalogu zadań.

  3. Wybierz polecenie kompilacji z listy rozwijanej Polecenie.

  4. W polu Ścieżka do projektów wprowadź ścieżkę do .csproj plików.

  5. Wybierz Dodaj.

  6. Wybierz pozycję Zapisz , aby zatwierdzić zmianę.

Kompilacja platformy .NET Core przy użyciu skryptu wiersza polecenia

Przykład kodu YAML do kompilowania przy użyciu polecenia dotnet build jako skryptu:

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

Zadanie kompilacji można dodać przy użyciu edytora potoku YAML, bezpośrednio edytując plik lub dodając zadanie wiersza polecenia.

Aby dodać zadanie Wiersz polecenia, wykonaj następujące czynności:

  1. Przejdź do pozycji w pliku YAML, w którym chcesz wstawić zadanie.

  2. Wybierz wiersz polecenia z katalogu zadań.

  3. Opcjonalnie dodaj nazwę wyświetlaną.

  4. dotnet build Wprowadź polecenie z parametrami. Na przykład dotnet build --configuration $(buildConfiguration).

  5. Wprowadź ścieżkę do .csproj pliku jako katalog roboczy.

  6. Wybierz Dodaj.

  7. Wybierz pozycję Zapisz , aby zatwierdzić zmianę.

Dodawanie poleceń zestawu .NET SDK do potoku

Polecenia zestawu .NET SDK można dodawać do projektu jako skrypt lub przy użyciu zadania platformy .NET Core. Zadanie platformy .NET Core (DotNetCoreCLI@2) umożliwia łatwe dodawanie poleceń dotnet CLI do pipeline'u. Zadania .NET Core można dodać, edytując plik YAML lub używając edytora klasycznego.

Dodaj polecenie CLI dla platformy .NET, używając zadania .NET Core

Aby dodać polecenie .NET Core CLI z użyciem edytora YAML, wykonaj te kroki:

  1. Przejdź do pozycji w pliku YAML, w którym chcesz wstawić zadanie.

  2. Wybierz pozycję .NET Core z katalogu zadań.

  3. Wybierz polecenie, które chcesz uruchomić.

  4. Skonfiguruj wszystkie potrzebne opcje.

  5. Wybierz Dodaj.

  6. Wybierz pozycję Zapisz , aby zatwierdzić zmianę.

Dodaj polecenie .NET Core CLI za pomocą skryptu

Polecenia interfejsu wiersza polecenia platformy .NET Core można dodać jako script element w azure-pipelines.yml pliku.

Przykład:


steps:
# ...
- script: dotnet test <test-project> 

Instalowanie narzędzia

Aby zainstalować narzędzie globalne platformy .NET Core, takie jak dotnetsay w kompilacji działającej w systemie Windows, wykonaj następujące kroki:

  1. Dodaj zadanie .NET Core i ustaw następujące właściwości:
    • Polecenie: niestandardowe.
      • Ścieżka do projektów: pozostaw puste.
    • Niestandardowe polecenie: narzędzie.
    • Argumenty: install -g dotnetsay.
  2. Aby uruchomić narzędzie, dodaj Wiersz polecenia i ustaw następujące właściwości:
    • Skrypt:dotnetsay.

Uruchamianie testów

Jeśli masz projekty testowe w repozytorium, możesz użyć zadania platformy .NET Core do uruchamiania testów jednostkowych przy użyciu platform testowych, takich jak MSTest, xUnit i NUnit. Projekt testowy musi odwoływać się do zestawu Microsoft.NET.Test.SDK w wersji 15.8.0 lub nowszej. Wyniki testów są automatycznie publikowane w usłudze. Te wyniki są dostępne w podsumowaniu kompilacji i mogą służyć do rozwiązywania problemów z testami i analizą czasu testu.

Zadanie testowe można dodać do potoku przy użyciu zadania DotNetCoreCLI@2 lub dodać następujący fragment kodu do azure-pipelines.yml pliku:

steps:
# ...
# do this after other tasks such as building
- task: DotNetCoreCLI@2
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration $(buildConfiguration)'

W przypadku korzystania z edytora zadań platformy .NET Core ustaw pozycję Command (Polecenie ) na test i Path to projects (Ścieżka do projektów ) powinny odwoływać się do projektów testowych w rozwiązaniu.

Alternatywnie, możesz uruchomić dotnet test polecenie za pomocą określonego rejestratora, a następnie użyć zadania Publikuj wyniki testu:

steps:
# ...
# do this after your tests have run
- script: dotnet test <test-project> --logger trx
- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testRunner: VSTest
    testResultsFiles: '**/*.trx'

Zbieranie pokrycia kodu

Podczas kompilowania na platformie Windows metryki pokrycia kodu można zbierać przy użyciu wbudowanego modułu zbierającego dane pokrycia. Projekt testowy musi odwoływać się do zestawu Microsoft.NET.Test.SDK w wersji 15.8.0 lub nowszej.

Gdy używasz zadania platformy .NET Core do uruchamiania testów, dane pokrycia są automatycznie publikowane na serwerze. Plik .coverage można pobrać z podsumowania kompilacji do wyświetlania w programie Visual Studio.

Dodaj następujący fragment kodu do pliku azure-pipelines.yml :

steps:
# ...
# do this after other tasks such as building
- task: DotNetCoreCLI@2
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration $(buildConfiguration) --collect "Code Coverage"'

Aby dodać zadanie platformy .NET Core za pomocą edytora zadań:

  1. Dodaj zadanie .NET Core do zadania kompilacji i ustaw następujące właściwości:

    1. Polecenie: test.
    2. Ścieżka do projektów: powinna odwoływać się do projektów testowych w rozwiązaniu.
    3. Argumenty: --configuration $(BuildConfiguration) --collect "Code Coverage".
  2. Upewnij się, że opcja Publikuj wyniki testu pozostaje zaznaczona.

Jeśli zdecydujesz się uruchomić polecenie dotnet test, określ rejestrator wyników testów oraz opcje pokrycia. Następnie użyj zadania Publikuj wyniki testu:

steps:
# ...
# do this after your tests have run
- script: dotnet test <test-project> --logger trx --collect "Code Coverage"
- task: PublishTestResults@2
  inputs:
    testRunner: VSTest
    testResultsFiles: '**/*.trx'

Zbierz metryki pokrycia kodu za pomocą Coverlet

Jeśli tworzysz w systemie Linux lub macOS, możesz użyć rozwiązania Coverlet lub podobnego narzędzia do zbierania metryk pokrycia kodu.

Wyniki pokrycia kodu można opublikować na serwerze za pomocą zadania Publikowanie wyników pokrycia kodu (PublishCodeCoverageResults@2). Narzędzie do analizy pokrycia musi być skonfigurowane tak, aby generować wyniki w formacie Cobertura lub JaCoCo.

Aby uruchomić testy i opublikować pokrycie kodu za pomocą Coverlet, wykonaj następujące zadania:

  • Dodaj odwołanie do coverlet.collector pakietu NuGet.

  • Dodaj następujący fragment kodu do pliku azure-pipelines.yml :

    - task: UseDotNet@2
      inputs:
        version: '8.x'
        includePreviewVersions: true # Required for preview versions
    
    - task: DotNetCoreCLI@2
      displayName: 'dotnet build'
      inputs:
        command: 'build'
        configuration: $(buildConfiguration)
    
    - task: DotNetCoreCLI@2
      displayName: 'dotnet test'
      inputs:
        command: 'test'
        arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura'
        publishTestResults: true
        projects: 'MyTestLibrary' # update with your test project directory
    
    - task: PublishCodeCoverageResults@2
      displayName: 'Publish code coverage report'
      inputs:
        codeCoverageTool: 'Cobertura'
        summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
    

Pakietowanie i dostarczanie kodu

Artefakty kompilacji można opublikować, wykonując następujące czynności:

  • Publikowanie w usłudze Azure Pipelines.
  • Publikowanie pakietów w usłudze Azure Artifacts.
  • Tworzenie pakietu NuGet i publikowanie go w kanale informacyjnym NuGet.
  • Tworzenie archiwum .zip w celu wdrożenia aplikacji internetowej.

Publikowanie artefaktów w usłudze Azure Pipelines

Aby opublikować dane wyjściowe kompilacji platformy .NET w potoku, wykonaj następujące zadania:

  • Uruchom dotnet publish --output $(Build.ArtifactStagingDirectory) w interfejsie wiersza poleceń platformy .NET lub dodaj zadanie DotNetCoreCLI@2 z poleceniem publikowania.
  • Opublikuj artefakt przy użyciu zadania Publikowanie artefaktu potoku.

Dodaj następujący fragment kodu do pliku azure-pipelines.yml :

steps:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

# this code takes all the files in $(Build.ArtifactStagingDirectory) and uploads them as an artifact of your build.
- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'myWebsite'

Uwaga

Zadanie DotNetCoreCLI@2 ma publishWebProjects dane wejściowe ustawione na wartość true domyślnie. To zadanie domyślnie publikuje wszystkie projekty internetowe w repozytorium. Więcej informacji i pomocy można znaleźć w zadaniu open source w witrynie GitHub.

Aby skopiować więcej plików do katalogu kompilacji przed opublikowaniem, użyj zadania Kopiuj pliki (CopyFile@2).

Aby opublikować dane wyjściowe kompilacji platformy .NET w potoku, wykonaj następujące zadania:

Dodaj następujący fragment kodu do azure-pipelines.yml pliku, aby opublikować artefakty kompilacji jako plik .zip:

steps:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

# this code takes all the files in $(Build.ArtifactStagingDirectory) and uploads them as an artifact of your build.
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'

Aby uzyskać więcej informacji, zobacz Publikowanie i pobieranie artefaktów kompilacji.

Opublikuj w kanale NuGet

Aby utworzyć pakiet NuGet i opublikować go w kanale informacyjnym NuGet, dodaj następujący fragment kodu:

steps:
# ...
# do this near the end of your pipeline in most cases
- script: dotnet pack /p:PackageVersion=$(version)  # define version variable elsewhere in your pipeline
- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: '<Name of the NuGet service connection>'
- task: NuGetCommand@2
  inputs:
    command: push
    nuGetFeedType: external
    publishFeedCredentials: '<Name of the NuGet service connection>'
    versioningScheme: byEnvVar
    versionEnvVar: version

Uwaga

Zadanie NuGetAuthenticate@1 nie obsługuje uwierzytelniania klucza interfejsu API NuGet. Jeśli używasz klucza API NuGet, użyj zadania NuGetCommand@2 z command ustawionym na push z argumentem --api-key. Na przykład dotnet nuget push --api-key $(NuGetApiKey).

Aby uzyskać więcej informacji na temat wersjonowania i publikowania pakietów NuGet, zobacz publikowanie w źródłach danych NuGet.

Publikowanie pakietu NuGet w usłudze Azure Artifacts

Pakiety NuGet można opublikować w kanale informacyjnym usługi Azure Artifacts przy użyciu NuGetCommand@2 do wypchnięcia do źródła danych usługi Azure Artifact. Na przykład zobacz Publikowanie pakietów NuGet za pomocą usługi Azure Pipelines.

Wdrażanie aplikacji internetowej

Aby utworzyć archiwum plików .zip, które jest gotowe do opublikowania w aplikacji internetowej, dodaj następujący fragment kodu:

steps:
# ...
# do this after you've built your app, near the end of your pipeline in most cases
# for example, you do this before you deploy to an Azure web app on Windows
- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

Aby opublikować to archiwum w aplikacji internetowej, zobacz Wdrażanie usługi Azure Web Apps.

Tworzenie obrazu i przesyłanie do rejestru kontenerów

Możesz również utworzyć obraz dla aplikacji i wypchnąć go do rejestru kontenerów.

Opublikuj symbole

Za pomocą zadania PublishSymbols@2 można opublikować symbole na serwerze symboli usługi Azure Artifacts lub w udziale plików.

Aby na przykład opublikować symbole w udziale plików, dodaj następujący fragment kodu do azure-pipelines.yml pliku:

- task: PublishSymbols@2
  inputs:
    SymbolsFolder: '$(Build.SourcesDirectory)'
    SearchPattern: '**/bin/**/*.pdb'
    IndexSources: true
    PublishSymbols: true
    SymbolServerType: 'FileShare' 
    SymbolsPath: '\\server\shareName'

W przypadku korzystania z edytora klasycznego wybierz pozycję Publikuj symbole źródeł indeksowania z katalogu zadań, aby dodać je do procesu.

Aby uzyskać więcej informacji, zobacz Publikowanie symboli.

Rozwiązywanie problemów

Jeśli możesz skompilować projekt na maszynie dewelopera, ale masz problem z kompilowaniem go w usłudze Azure Pipelines, zapoznaj się z następującymi potencjalnymi przyczynami i akcjami naprawczymi:

  • Wersje wstępne zestawu .NET Core SDK nie są zainstalowane na agentach hostowanych przez firmę Microsoft. Po wydaniu nowej wersji zestawu .NET Core SDK wdrożenie wszystkich centrów danych usługi Azure Pipelines może potrwać kilka tygodni. Nie musisz czekać na ukończenie tego wdrożenia. Za pomocą zadania Użyj platformy .NET Core możesz zainstalować wersję zestawu .NET Core SDK, która ma być zainstalowana na agentach hostowanych przez firmę Microsoft.
  • Sprawdź wersje i środowisko uruchomieniowe zestawu .NET Core SDK na maszynie deweloperów i upewnij się, że są one zgodne z agentem. Możesz dołączyć skrypt dotnet --version wiersza polecenia w potoku, aby wydrukować wersję zestawu .NET Core SDK. Użyj Instalatora narzędzi platformy .NET Core, aby wdrożyć tę samą wersję na agencie, lub zaktualizuj projekty i maszynę programową do nowszej wersji zestawu .NET Core SDK.

  • Możliwe, że używasz logiki w środowisku IDE programu Visual Studio, która nie jest zakodowana w potoku. Usługa Azure Pipelines uruchamia każde z poleceń, które są określone w zadaniach, jedno po drugim w osobnym procesie. Sprawdź dzienniki z kompilacji potoków, aby wyświetlić dokładne polecenia uruchomione w ramach kompilacji. Powtórz te same polecenia w tej samej kolejności na maszynie dewelopera, aby zlokalizować problem.

  • Jeśli masz mieszane rozwiązanie obejmujące niektóre projekty .NET Core i niektóre projekty .NET Framework, należy również użyć zadania NuGet do przywrócenia pakietów określonych w packages.config plikach. Dodaj zadanie MSBuild lub Visual Studio Build, aby skompilować projekty programu .NET Framework.

  • Kompilacje mogą sporadycznie zakończyć się niepowodzeniem podczas przywracania pakietów: NuGet.org ma problemy lub występują problemy z siecią między centrum danych Azure a NuGet.org. Możesz sprawdzić, czy używanie usługi Azure Artifacts z NuGet.org jako źródła nadrzędnego zwiększa niezawodność kompilacji, ponieważ nie jest to pod naszą kontrolą.

  • Czasami, gdy nowa wersja zestawu .NET Core SDK lub Visual Studio jest wdrażana, to kompilacja może ulec awarii. Na przykład, gdy nowsza wersja lub funkcja narzędzia NuGet jest dostarczana w ramach SDK, może to spowodować błąd kompilacji. Aby wyizolować ten problem, użyj zadania Instalator narzędzi platformy .NET Core, aby określić wersję zestawu .NET Core SDK używanego w kompilacji.

Często zadawane pytania

.: Gdzie mogę dowiedzieć się więcej o usłudze Azure Artifacts?

1: Zarządzanie pakietami w usłudze Azure Artifacts

Q: Gdzie mogę dowiedzieć się więcej o poleceniach platformy .NET Core?

Narzędzia CLI platformy .NET Core

.: Gdzie mogę dowiedzieć się więcej na temat uruchamiania testów w moim rozwiązaniu?

1: Testowanie jednostkowe w projektach platformy .NET Core

.: Gdzie mogę dowiedzieć się więcej o zadaniach?

Zadania kompilacji i publikowania