Kompilowanie, testowanie i wdrażanie projektów platformy .NET Core

Usługi Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

W tym artykule opisano sposób pracy z projektami platformy .NET Core przy użyciu usługi Azure Pipelines. W tym artykule przedstawiono następujące zadania:

  • Utwórz aplikację internetową platformy .NET Core i przekaż ją do repozytorium GitHub.
  • Utwórz projekt usługi Azure DevOps i potok usługi Azure Pipelines do kompilowania projektu.
  • Skonfiguruj środowisko kompilacji przy użyciu własnych agentów.
  • Przywróć zależności, skompiluj projekt i przetestuj je za pomocą zadania platformy .NET Core (DotNetCoreCLI@2) lub skryptu.
  • Użyj zadania .NET Core (DotNetCoreCLI@2), aby dodać inne polecenia zestawu .NET SDK do potoku.
  • Użyj zadania Publikuj wyniki pokrycia kodu (Publish code coverage results v2), aby opublikować wyniki pokrycia kodu.
  • Spakuj i dostarcz wyniki kompilacji do potoku, źródła NuGet, archiwum ZIP lub innych lokalizacji docelowych.
  • Utwórz aplikację internetową platformy .NET Core i przekaż ją do repozytorium GitHub.
  • Utwórz projekt usługi Azure DevOps i potok usługi Azure Pipelines, aby skompilować ten projekt.
  • Skonfiguruj środowisko kompilacji przy użyciu agentów hostowanych przez firmę Microsoft lub własnych.
  • Przywróć zależności, skompiluj projekt i przetestuj je za pomocą zadania platformy .NET Core (DotNetCoreCLI@2) lub skryptu.
  • Użyj zadania .NET Core (DotNetCoreCLI@2), aby dodać do potoku inne polecenia pakietu SDK platformy .NET.
  • Użyj zadania Publikuj wyniki pokrycia kodu (Publish code coverage results v2), aby opublikować wyniki pokrycia kodu.
  • Spakuj i dostarcz wyniki kompilacji do potoku, źródła pakietów NuGet, archiwum ZIP lub innych lokalizacji docelowych.

Uwaga

Aby pracować z projektami programu .NET Framework, zobacz Tworzenie aplikacji ASP.NET za pomocą programu .NET Framework.

Wymagania wstępne

Aby wykonać wszystkie procedury opisane w tym artykule, potrzebne są następujące wymagania wstępne:

Aby wykonać wszystkie procedury opisane w tym artykule, potrzebne są następujące wymagania wstępne:

  • Kolekcja usługi Azure DevOps.
  • Projekt usługi Azure DevOps utworzony w organizacji. Aby uzyskać instrukcje, zobacz Tworzenie projektu w usłudze Azure DevOps.
  • Członkostwo w grupie Project Administrators, co umożliwia tworzenie projektów Azure DevOps i udzielanie potokom dostępu do projektów. Właściciele organizacji usługi Azure DevOps automatycznie mają to członkostwo.
  • Rola Administrator lub Twórca dla połączeń usług, które można przypisać jako administrator projektu.
  • Konto i repozytorium GitHub .

Tworzenie projektu platformy .NET i przekazywanie go do usługi GitHub

Jeśli chcesz użyć projektu platformy .NET, który znajduje się już w repozytorium GitHub, możesz pominąć tę sekcję.

Jeśli nie masz projektu platformy .NET do pracy, utwórz nowy na komputerze lokalnym w następujący sposób:

  1. Zainstaluj zestaw .NET 8.0 SDK lub upewnij się, że jest zainstalowany.
  2. Otwórz okno terminalu na komputerze lokalnym.
  3. Utwórz katalog projektu i przejdź do niego.
  4. Utwórz nową aplikację internetową platformy .NET 8, uruchamiając polecenie dotnet new webapp -f net8.0.
  5. Skompiluj i uruchom aplikację lokalnie przy użyciu polecenia dotnet run.
  6. Po uruchomieniu aplikacji naciśnij Ctrl+C, aby ją zamknąć.
  7. Przekaż lub połącz projekt lokalny z repozytorium GitHub.

Stwórz potok

Jeśli masz potok, którego chcesz użyć, możesz pominąć tę sekcję. W przeciwnym razie można użyć albo edytora potoku YAML, albo edytora klasycznego do utworzenia potoku.

  1. W projekcie usługi Azure DevOps wybierz pozycję Potoki z menu nawigacji po lewej stronie.

  2. Wybierz pozycję Nowy potok lub Utwórz potok , jeśli ten potok jest pierwszym w projekcie.

  3. Na ekranie Gdzie jest twój kod wybierz pozycję GitHub.

  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. Na ekranie Wybieranie repozytorium wybierz repozytorium, w których znajduje się aplikacja .NET.

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

  1. Na karcie Konfigurowanie wybierz pozycję Pokaż więcej , a następnie wybierz szablon potoku ASP.NET Core z listy. Ten szablon zawiera wiele kroków i ustawień opisanych w tym artykule.

    Możesz również wybrać pozycję Potok startowy na karcie Konfigurowanie , aby rozpocząć od minimalnej liczby potoków i dodać kroki i ustawienia samodzielnie.

  2. Na karcie Przegląd sprawdź kod YAML. Plik można dostosować pod kątem wymagań. Można na przykład określić inną pulę agentów lub dodać zadanie, aby zainstalować inny zestaw .NET SDK.

  1. W projekcie usługi Azure DevOps wybierz pozycję Potoki z menu nawigacji po lewej stronie.

  2. Wybierz pozycję Nowy potok lub Utwórz potok , jeśli ten potok jest pierwszym w projekcie.

  3. Wybierz typ repozytorium źródłowego. W tym przykładzie użyj usługi GitHub Enterprise Server.

  4. Na następnym ekranie wprowadź następujące informacje:

    • Adres URL konta usługi GitHub, na przykład https://github.com/myname.
    • Osobisty token dostępu (PAT) w usłudze GitHub.
    • Nazwa połączenia z usługą, na przykład my-github.
  5. Wybierz pozycję Utwórz.

  6. Wybierz repozytorium GitHub.

  7. Na karcie Konfigurowanie wybierz pozycję Pokaż więcej i wybierz szablon potoku ASP.NET Core z listy. Ten szablon zawiera wiele kroków i ustawień opisanych w tym artykule.

  8. Sprawdź nowy kod potoku YAML. Plik YAML można dostosować pod kątem wymagań. Możesz na przykład dodać zadanie, aby zainstalować inny zestaw .NET SDK lub przetestować i opublikować projekt.

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

    Zrzut ekranu przedstawiający przycisk Zapisz i uruchom w nowym potoku YAML.

  2. Opcjonalnie zmodyfikuj komunikat zatwierdzenia, a następnie ponownie wybierz Zapisz i uruchom.

  3. Na karcie Podsumowanie wybierz zadanie w sekcji Zadania , aby obejrzeć potok w akcji.

Masz teraz działający potok przetwarzania gotowy do dostosowania.

Konfigurowanie środowiska kompilacji

Usługa Azure Pipelines używa własnych agentów do kompilowania projektu platformy .NET Core. Możesz użyć zestawu .NET Core SDK i środowiska uruchomieniowego w agentach systemu Windows, Linux, macOS lub Docker . Upewnij się, że masz wymaganą wersję zestawu .NET Core SDK i środowiska uruchomieniowego zainstalowanego na agentach.

Aby zainstalować określoną wersję pakietu SDK platformy .NET, dodaj zadanie UseDotNet@2 do pliku potoku YAML lub zadanie Use .NET Core w edytorze klasycznym.

Uwaga

W przypadku agentów działających na systemach fizycznych instalowanie zestawów SDK i narzędzi za pośrednictwem potoku zmienia środowisko kompilacji na hoście agenta.

Poniższy przykładowy fragment kodu YAML instaluje zestaw .NET SDK 8.0.x:

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

Aby zainstalować nowszy zestaw SDK, ustaw wartość performMultiLevelLookuptrue.

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

Możesz wybrać pulę agentów i agenta na potrzeby zadania budowania. Można również określić agentów na podstawie ich możliwości. Na przykład poniższy fragment potoku YAML wybiera pulę i możliwości agenta.

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

Projekty platformy .NET Core można tworzyć przy użyciu zestawu .NET Core SDK i środowiska uruchomieniowego dla systemów Windows, Linux lub macOS. Domyślnie kompilacje są uruchamiane na agentach hostowanych przez firmę Microsoft, więc nie trzeba konfigurować infrastruktury.

Agenci hostowani przez Microsoft w Azure Pipelines mają kilka wstępnie zainstalowanych wersji obsługiwanych zestawów SDK platformy .NET Core. Zobacz Agenci hostowani przez firmę Microsoft , aby uzyskać pełną listę dostępnych obrazów i przykładów konfiguracji.

Poniższy fragment kodu potoku YAML ustawia system operacyjny Ubuntu dla puli agentów.

pool:
  vmImage: 'ubuntu-latest' 

Agenci hostowani przez firmę Microsoft nie obejmują niektórych starszych wersji zestawu .NET Core SDK i zazwyczaj nie zawierają wersji wstępnych. Jeśli potrzebujesz tych wersji zestawu SDK na agentach hostowanych przez firmę Microsoft, możesz je zainstalować przy użyciu zadania Use DotNet (UseDotNet@2).

Na przykład następujący kod instaluje zestaw SDK platformy .NET 8.0.x:

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

Agenci systemu Windows zawierają już środowisko uruchomieniowe platformy .NET Core. Aby zainstalować nowszy zestaw SDK, ustaw wartość performMultiLevelLookup na true tak, jak w poniższym fragmencie kodu:

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

Agenci hostowani samodzielnie

Alternatywnie możesz użyć własnych agentów do kompilowania projektów platformy .NET Core. Można skonfigurować agenty hostowane samodzielnie dla systemów Linux, macOS lub Windows.

Za pomocą samodzielnie hostowanych agentów można:

  • Unikaj kosztów uruchamiania UseDotNet@2 instalatora narzędzi.
  • Zmniejsz czas kompilacji, jeśli masz duże repozytorium.
  • Uruchamianie kompilacji przyrostowych.
  • Użyj zestawów SDK w wersji zapoznawczej lub prywatnych, których firma Microsoft nie obsługuje oficjalnie.
  • Używaj zestawów SDK dostępnych tylko w środowiskach firmowych lub lokalnych.

Aby uzyskać więcej informacji, zobacz Agenci hostowani samodzielnie.

Przywracanie zależności

Pakiety NuGet umożliwiają projektowi korzystanie z kodu, który nie jest kompilowany. Uruchom polecenie , dotnet restore aby pobrać pakiety NuGet i narzędzia specyficzne dla projektu. To polecenie można uruchomić za pomocą zadania .NET Core (DotNetCoreCLI@2) lub jako skryptu w potoku. Polecenie dotnet restore używa NuGet.exe spakowanego za pomocą zestawu .NET Core SDK i może przywracać tylko pakiety określone w plikach *.csproj projektu .NET Core.

Użyj zadania .NET Core (DotNetCoreCLI@2), aby pobrać i przywrócić pakiety NuGet z usługi Azure Artifacts, NuGet.org lub innego uwierzytelnionego zewnętrznego lub wewnętrznego repozytorium NuGet. Jeśli źródło danych NuGet znajduje się w tym samym projekcie co potok, nie musisz się uwierzytelniać. Aby uzyskać więcej informacji, zobacz .NET Core task (DotNetCoreCLI@2).

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 rozwiązać ten problem, użyj usługi Azure Artifacts lub własnego agenta , aby skorzystać z pamięci podręcznej pakietu.

Poniższy potok używa DotNetCoreCLI@2 zadania do przywrócenia źródła danych usługi Azure Artifact.

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)'

Platforma .NET automatycznie przywraca pakiety podczas uruchamiania poleceń, takich jak dotnet build. Nadal musisz użyć zadania .NET Core (DotNetCoreCLI@2), aby przywrócić pakiety, jeśli używasz uwierzytelnionego źródła danych.

Zarządzaj poświadczeniami dla uwierzytelnionego źródła, tworząc połączenie usługi NuGet w Ustawieniach projektu>Potoki>Połączenia usług. Aby uzyskać więcej informacji na temat połączeń usługi NuGet, zobacz Publikowanie pakietów NuGet za pomocą usługi Azure Pipelines.

Przywracanie pakietów z NuGet.org

Aby przywrócić pakiety z NuGet.org, zaktualizuj potok w następujący sposób.

Możesz dodać polecenie restore do potoku, edytując bezpośrednio kod YAML lub za pomocą asystenta zadań.

Dodaj zadanie .NET Core (DotNetCoreCLI@2) bezpośrednio, wstawiając poniższy fragment kodu do pliku azure-pipelines.yml przed zadaniami kompilacji.

steps:
- task: DotNetCoreCLI@2
  displayName: Restore
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: select

Aby użyć asystenta zadań:

  1. Przejdź do pozycji w pliku YAML, w którym chcesz wstawić zadanie.
  2. Wybierz pozycję .NET Core z katalogu zadań.
  3. Na ekranie konfiguracji wybierz pozycję Przywróć z listy rozwijanej Polecenie .
  4. W polu Ścieżka do projektów lub rozwiązań wprowadź ścieżkę do plików *.csproj . Symbol wieloznaczny **/*.csproj można używać dla wszystkich plików *.csproj we wszystkich podfolderach.
  5. Dla Źródeł do dodania upewnij się, że zaznaczone są opcje Źródła wybrane przeze mnie tutaj i Użyj pakietów z NuGet.org.
  6. Wybierz Dodaj.
  7. Wybierz pozycję Zweryfikuj i zapisz, a następnie wybierz pozycję Zapisz , aby zatwierdzić zmianę.

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

Aby określić zewnętrzne repozytorium NuGet, umieść adres URL w pliku NuGet.config w repozytorium. Upewnij się, że w pliku NuGet.config określono dowolne źródło danych niestandardowych i że poświadczenia są określone w połączeniu usługi NuGet.

Aby przywrócić pakiety z zewnętrznego źródła danych, dodaj restore zadanie zgodnie z instrukcjami w poprzedniej sekcji, ale zmień ustawienia konfiguracji w następujący sposób:

Dodaj zadanie .NET Core (DotNetCoreCLI@2) bezpośrednio, wstawiając poniższy fragment kodu do pliku azure-pipelines.yml przed zadaniami kompilacji. Zastąp <NuGet service connection> nazwą połączenia usługi.

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

Aby użyć asystenta zadań:

  1. Dodaj zadanie .NET Core i wybierz pozycję Przywróć na ekranie konfiguracji, tak jak w poprzedniej procedurze.
  2. Aby dodać kanały informacyjne, wybierz pozycję Kanały informacyjne w NuGet.config.
  3. W polu Ścieżka do NuGet.config wprowadź ścieżkę do pliku NuGet.config względem katalogu głównego swojego repozytorium. Możesz wybrać wielokropek ... obok pola, do którego chcesz przejść, i wybrać lokalizację.
  4. W obszarze Poświadczenia dla źródeł danych spoza tej organizacji/kolekcji wybierz poświadczenia do użycia dla rejestrów zewnętrznych w wybranym pliku NuGet.config . W przypadku kanałów informacyjnych w tej samej organizacji pozostaw to pole puste. Dane logowania kompilacji są używane automatycznie.

Przywracanie pakietów dla projektów programu .NET Framework

Jeśli rozwiązanie zawiera projekt .NET Framework lub używasz package.json do określania zależności, użyj zadania NuGetCommand@2 , aby przywrócić te zależności.

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

Uwaga

W przypadku systemu Ubuntu 24.04 lub nowszego należy użyć zadania NuGetAuthenticate zamiast zadania NuGetCommand@2 z interfejsem wiersza polecenia platformy .NET. Aby uzyskać więcej informacji, zobacz Obsługa nowszych obrazów hostowanych w systemie Ubuntu.

Zbuduj swój projekt

Skompiluj swój projekt .NET Core, uruchamiając polecenie dotnet build. Polecenie można dodać do potoku za pomocą zadania .NET Core (DotNetCoreCLI@2) lub jako skrypt wiersza polecenia.

Użyj zadania .NET Core

Zadanie kompilacji można dodać przy użyciu edytora potoku YAML. Możesz bezpośrednio edytować plik lub użyć asystenta zadań.

Dodaj zadanie .NET Core (DotNetCoreCLI@2) bezpośrednio, wstawiając poniższy fragment kodu. Zaktualizuj arguments, aby dopasować go do swoich potrzeb.

steps:
- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '**/*.csproj'
    arguments: '--configuration $(buildConfiguration)'

Aby użyć asystenta zadań:

  1. Przejdź do pozycji w pliku YAML, w którym chcesz wstawić zadanie.
  2. Wybierz zadanie .NET Core (DotNetCoreCLI@2).
  3. Wybierz opcję kompilacja z listy rozwijanej Polecenie.
  4. W polu Ścieżka do projektów lub rozwiązań wprowadź ścieżkę do plików *.csproj . Symbol wieloznaczny **/*.csproj można używać dla wszystkich plików *.csproj we wszystkich podfolderach.
  5. Wybierz Dodaj.
  6. Wybierz pozycję Zapisz , aby zatwierdzić zmianę.

Kompilowanie platformy .NET Core za pomocą skryptu wiersza polecenia

Możesz również skompilować przy użyciu skryptu wiersza polecenia.

Aby dodać wiersz polecenia kompilacji, bezpośrednio edytując plik YAML, dodaj następujący kod:

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

Możesz również użyć asystenta zadań, aby dodać zadanie Wiersz polecenia.

  1. Przejdź do pozycji w pliku YAML, w którym chcesz wstawić zadanie.
  2. Wybierz z listy zadanie Wiersz polecenia (CmdLine@2).
  3. W polu Skrypt wprowadź dotnet build polecenie z parametrami. Na przykład dotnet build --configuration $(buildConfiguration).
  4. W obszarze Zaawansowany>katalog roboczy wprowadź ścieżkę do pliku *.csproj jako katalogu roboczego. Jeśli pozostawisz to pole puste, katalog roboczy domyślnie ma wartość $(Build.SourcesDirectory).
  5. Wybierz Dodaj.
  6. Wybierz pozycję Zapisz , aby zatwierdzić zmianę.

Dodawanie innych poleceń zestawu .NET SDK do potoku

Do potoku można dodać inne polecenia zestawu SDK platformy .NET za pomocą zadania .NET Core (DotNetCoreCLI@2) lub skryptów.

Dodaj polecenie .NET CLI za pomocą zadania .NET Core

Zadanie .NET Core (DotNetCoreCLI@2) umożliwia łatwe dodawanie poleceń interfejsu wiersza polecenia platformy .NET do potoku. Zadania platformy .NET Core (DotNetCoreCLI@2) można dodawać, edytując plik YAML lub za pomocą edytora klasycznego.

Aby dodać polecenie .NET Core przy użyciu asystenta poleceń w edytorze potoku YAML, wykonaj następujące 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ć z listy rozwijanej w polu Polecenie .
  4. Skonfiguruj wszystkie potrzebne opcje.
  5. Wybierz Dodaj.
  6. Wybierz pozycję Zapisz , aby zatwierdzić zmianę.

Dodaj polecenie interfejsu wiersza polecenia .NET Core w skrypcie

Dodaj polecenie .NET Core CLI jako script w pliku azure-pipelines.yml. Przykład:


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

Instalowanie narzędzia

Aby zainstalować narzędzie globalne platformy .NET Core, takie jak dotnetsay w kompilacji uruchomionej w systemie Windows, dodaj zadanie platformy .NET Core i ustaw następujące właściwości w konfiguracji:

  • Polecenie: niestandardowe
  • Ścieżka do projektów: pozostaw puste
  • Polecenie niestandardowe: tool
  • Argumenty: install -g dotnetsay

Aby uruchomić narzędzie, dodaj zadanie Wiersz polecenia i wprowadź dotnetsay w polu Skrypt.

Uruchamianie testów

Gdy repozytorium zawiera projekty testowe, użyj zadania .NET Core (DotNetCoreCLI@2), aby uruchamiać testy jednostkowe przy użyciu struktur 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.

Usługa automatycznie publikuje wyniki testów. Można je zobaczyć w podsumowaniu kompilacji. Skorzystaj z wyników testu, aby rozwiązać problemy z testami, które zakończyły się niepowodzeniem, i przeanalizować czas testu.

Aby dodać zadanie testowe do potoku, dodaj następujący fragment kodu do pliku azure-pipelines.yml :

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

Jeśli używasz asystenta zadań do dodawania zadania .NET Core (DotNetCoreCLI@2), ustaw następujące właściwości:

  • Polecenie: test
  • Ścieżka do projektów: ustaw ścieżkę do projektów testowych w rozwiązaniu
  • Argumenty: --configuration $(BuildConfiguration)

Alternatywnie, uruchom polecenie dotnet test z określonym rejestratorem, a następnie użyj zadania PublishTestResults@2.

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

Zbieranie pokrycia kodu

Podczas kompilacji na platformie Windows można zbierać metryki pokrycia kodu 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 korzystasz z zadania .NET Core (DotNetCoreCLI@2) do uruchamiania testów, pipeline automatycznie publikuje dane dotyczące pokrycia kodu na serwerze. Możesz pobrać plik *.coverage z podsumowania kompilacji, aby wyświetlić go w programie Visual Studio.

Aby zbierać informacje o pokryciu kodu, dodaj argument --collect "Code Coverage" podczas dodawania zadania testowego do potoku.

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

Jeśli używasz asystenta zadań do dodawania zadania .NET Core (DotNetCoreCLI@2), ustaw następujące właściwości:

  • Polecenie: test
  • Ścieżka do projektów: Ustaw ścieżkę do projektów testowych w rozwiązaniu
  • Argumenty: --configuration $(BuildConfiguration) --collect "Code Coverage"

Upewnij się, że opcja Publikuj wyniki testu pozostaje zaznaczona.

Alternatywnie, aby zebrać wyniki pokrycia kodu za pomocą polecenia dotnet test z określonym rejestratorem danych, a następnie uruchomić zadanie PublishTestResults@2, użyj następującego kodu:

steps:
# ...
# do this after your tests 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

W przypadku kompilacji w systemie Linux lub macOS użyj rozwiązania Coverlet lub podobnego narzędzia, aby zebrać metryki pokrycia kodu.

Wyniki pokrycia kodu można opublikować na serwerze za pomocą zadania Publikuj wyniki pokrycia kodu (PublishCodeCoverageResults@2). Należy skonfigurować narzędzie pokrycia, aby wygenerować wyniki w formacie pokrycia Cobertura lub JaCoCo.

Aby uruchomić testy i opublikować raport pokrycia kodu przy użyciu narzędzia Coverlet:

  1. Dodaj odwołanie do coverlet.collector pakietu NuGet.
  2. Dodaj następujący fragment kodu do pliku azure-pipelines.yml . Nie dodawaj dodatkowych DataCollectionRunSettings argumentów, ponieważ XPlat Code Coverage moduł zbierający tworzy już raport Cobertura.
- task: UseDotNet@2
  inputs:
    version: '8.x'
  
- task: DotNetCoreCLI@2
  displayName: 'dotnet build'
  inputs:
    command: 'build'
    arguments: '--configuration $(buildConfiguration)'
  
- task: DotNetCoreCLI@2
  displayName: 'dotnet test'
  inputs:
    command: 'test'
    arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage"'
    publishTestResults: true
    projects: '<test project directory>'
  
- task: PublishCodeCoverageResults@2
  displayName: 'Publish code coverage report'
  inputs:
    summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'

Pakietowanie i dostarczanie kodu

Aby spakować i dostarczyć dane wyjściowe kompilacji, możesz:

  • Publikowanie artefaktów kompilacji w usłudze Azure Pipelines.
  • Utwórz pakiet NuGet i opublikuj go w kanale informacyjnym NuGet.
  • Opublikuj pakiet NuGet w usłudze Azure Artifacts.
  • Utwórz archiwum ZIP do wdrożenia w aplikacji internetowej.
  • Publikowanie symboli na serwerze symboli usługi Azure Artifacts lub w udziale plików.

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

Publikowanie artefaktów w usłudze Azure Pipelines

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

  1. Uruchom dotnet publish --output $(Build.ArtifactStagingDirectory) przy użyciu interfejsu wiersza polecenia .NET lub dodaj zadanie .NET Core (DotNetCoreCLI@2) za pomocą polecenia publish.
  2. Użyj zadania Publikowanie artefaktu potoku (PublishPipelineArtifact@1), aby opublikować artefakt. To zadanie przesyła wszystkie pliki z $(Build.ArtifactStagingDirectory) jako artefakt Twojej kompilacji.

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

steps:

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

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'myWebsite'

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

Uwaga

Parametr wejściowy publishWebProjects w zadaniu .NET Core (DotNetCoreCLI@2) jest domyślnie ustawiony na true i publikuje wszystkie projekty internetowe w repozytorium. Aby uzyskać więcej informacji, zobacz repozytorium GitHub azure-pipelines-tasks .

Aby opublikować wyniki kompilacji .NET w potoku, wykonaj następujące czynności:

  1. Uruchom dotnet publish --output $(Build.ArtifactStagingDirectory) przy użyciu interfejsu wiersza polecenia platformy .NET lub dodaj zadanie .NET Core (DotNetCoreCLI@2) za pomocą polecenia publish.
  2. Opublikuj artefakt przy użyciu zadania Publikowanie artefaktu kompilacji (PublishBuildArtifacts@1).

Poniższy kod azure-pipelines.yml również publikuje artefakty kompilacji jako plik ZIP. Zadanie PublishBuildArtifacts@1 przesyła wszystkie pliki w $(Build.ArtifactStagingDirectory) jako artefakt Twojej kompilacji.

steps:

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

- 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 do pliku azure-pipelines.yml :

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

Uwaga

Zadanie NuGetAuthenticate@1 nie obsługuje uwierzytelniania za pomocą klucza API usługi NuGet. Jeśli używasz klucza API NuGet, użyj zadania NuGetCommand@2, ustawiając parametr wejściowy command na push i używając argumentu --api-key. Na przykład dotnet nuget push --api-key $(NuGetApiKey).

Aby uzyskać więcej informacji na temat przechowywania wersji i publikowania pakietów NuGet, zobacz Publikowanie pakietów NuGet za pomocą usługi Azure Pipelines.

Publikowanie pakietu NuGet w usłudze Azure Artifacts

Pakiety NuGet można opublikować w kanale informacyjnym usługi Azure Artifacts przy użyciu zadania NuGetCommand@2 . Aby uzyskać więcej informacji, zobacz Publikowanie pakietów NuGet za pomocą usługi Azure Pipelines.

Publikowanie archiwum pliku ZIP w aplikacji internetowej

Aby utworzyć archiwum plików ZIP, które jest gotowe do opublikowania w aplikacji internetowej, dodaj następujący fragment kodu do azure-pipelines.yml. Uruchom to zadanie po utworzeniu aplikacji w pobliżu końca potoku w większości przypadków. Na przykład uruchom to zadanie przed wdrożeniem do aplikacji internetowej Azure w systemie Windows.

steps:
# ...
- 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.

Opublikuj symbole

Za pomocą PublishSymbols@2 zadania można publikować symbole na serwerze symboli usługi Azure Artifacts lub w udziale plików. Aby uzyskać więcej informacji, zobacz Publikowanie symboli.

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

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

Aby użyć edytora klasycznego, dodaj do potoku zadanie Indeksuj źródła i opublikuj symbole .

Rozwiązywanie problemów

Jeśli projekt kompiluje się pomyślnie na komputerze lokalnym, ale nie w usłudze Azure Pipelines, zapoznaj się z następującymi potencjalnymi przyczynami i działaniami naprawczymi.

  • Agenci hostowani przez firmę Microsoft nie mają zainstalowanych wersji wstępnych zestawu .NET Core SDK i wdrożenie nowej wersji zestawu SDK we wszystkich centrach danych usługi Azure Pipelines może potrwać kilka tygodni. Zamiast czekać na zakończenie wdrożenia, użyj zadania Użyj platformy .NET Core , aby zainstalować wersję zestawu .NET Core SDK, która ma być zainstalowana na agentach hostowanych przez firmę Microsoft.
  • Nowa wersja zestawu .NET Core SDK lub Visual Studio może spowodować przerwanie kompilacji. Może na przykład zawierać nowszą wersję lub funkcję narzędzia NuGet. Upewnij się, że wersje zestawu SDK platformy .NET Core oraz środowisko uruchomieniowe na komputerze programisty są takie same jak na agencie potoku.

    Możesz dołączyć do swojego potoku dotnet --version skrypt wiersza polecenia, aby wyświetlić wersję zestawu SDK platformy .NET Core. Użyj Instalatora narzędzi platformy .NET Core , aby wdrożyć tę samą wersję na agencie, lub zaktualizuj projekty i maszynę programową do wersji potoku zestawu .NET Core SDK.

  • Problemy z połączeniem mogą powodować sporadyczne niepowodzenie kompilacji podczas przywracania pakietów z NuGet.org. NuGet.org mogą występować problemy lub mogą występować problemy z siecią między centrum danych platformy Azure i NuGet.org. Możesz sprawdzić, czy użycie usługi Azure Artifacts ze źródłami nadrzędnymi w celu buforowania pakietów zwiększa niezawodność kompilacji.

    Potok przetwarzania automatycznie używa swoich poświadczeń do połączenia z Azure Artifacts. Te poświadczenia zazwyczaj pochodzą 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.

  • Być może używasz w Visual Studio logiki, która nie jest uwzględniona w Twoim potoku. Usługa Azure Pipelines uruchamia każde polecenie w zadaniu sekwencyjnie w nowym procesie. Sprawdź dzienniki z kompilacji potoków, aby wyświetlić dokładne polecenia uruchomione w kompilacji. Aby zlokalizować problem, powtórz te same polecenia w tej samej kolejności na maszynie dewelopera.

  • Jeśli masz mieszane rozwiązanie obejmujące niektóre projekty .NET Core i niektóre projekty programu .NET Framework, użyj zadania NuGet , aby przywrócić pakiety określone w plikach packages.config . Dodaj zadanie MSBuild lub Visual Studio Build, aby skompilować projekty programu .NET Framework.