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.
  • Organizacja i projekt usługi Azure DevOps. Utwórz je bezpłatnie.
  • Możliwość uruchamiania potoków na agentach hostowanych przez firmę Microsoft. Możesz kupić zadanie równoległe lub zażądać warstwy Bezpłatna.
  • 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 zainstalowaną platformą Docker i uruchomioną na hoście agenta.

Tworzenie pierwszego potoku

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 klawisze Ctrl-C, aby ją zamknąć.

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

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

  2. Połączenie lokalnego repozytorium Git do 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 własnych 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żna zainstalować określoną wersję zestawu .NET SDK, dodając zadanie UseDotNet@2 w pliku YAML potoku lub dodając zadanie do potoku przy użyciu edytora klasycznego.

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ć własnego agenta. 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.

Tworzenie potoku

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

Tworzenie nowego potoku i wybieranie źródła
  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, wybierając najpierw usługę GitHub jako lokalizację kodu źródłowego.

  4. Być może nastąpi przekierowanie do usługi GitHub w celu zalogowania się. Jeśli tak, wprowadź poświadczenia usługi 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.

Konfigurowanie potoku
  1. Po wyświetleniu karty Konfigurowanie wybierz pozycję Pokaż więcej i wybierz szablon potoku ASP.NET Core z listy.

  2. Sprawdź nowy potok, aby zobaczyć, 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.

Zapisywanie i uruchamianie potoku
  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ć potok w akcji, wybierz zadanie w sekcji Zadania .

Tworzenie i uruchamianie potoku

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

  1. Przejdź do projektu i wybierz pozycję Potoki.
  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.

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

  2. Sprawdź nowy potok, aby 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.

Zapisywanie i uruchamianie potoku
  1. Wybierz pozycję Zapisz.

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

  2. Aby zatwierdzić plik YAML potoku w repozytorium, zmodyfikuj komunikat zatwierdzenia zgodnie z potrzebami i wybierz pozycję Zapisz.

  3. Wybierz pozycję Uruchom , aby uruchomić potok.

Aby wyświetlić dzienniki kompilacji podczas uruchamiania potoku, wybierz numer kompilacji w górnej części strony.

  1. Wybierz pozycję Zapisz i uruchom.

    Zrzut ekranu przedstawiający przycisk Zapisz i uruchom w nowym potoku 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ć potok w akcji, wybierz zadanie w sekcji Zadania .

Masz teraz potok roboczy, który jest gotowy do dostosowania. Przeczytaj więcej, aby dowiedzieć się więcej na temat typowych sposobów dostosowywania potoku.

Ś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.

Aby na przykład wybrać pulę i możliwości agenta w pliku YAML potoku:

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

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

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

Aby zainstalować nowszy zestaw SDK, ustaw wartość na performMultiLevelLookuptrue w następującym fragmencie kodu:

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 system Ubuntu jest ustawiony tutaj w pliku YAML 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 wartość na performMultiLevelLookuptrue w następującym fragmencie kodu:

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 i narzędzia specyficzne dla projektu określone w pliku projektu można pobrać, uruchamiając dotnet restore polecenie za pomocą zadania platformy .NET Core lub bezpośrednio w skrypsie 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ł informacyjny znajduje się w tym samym projekcie co potok, nie musisz 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 spakowanego NuGet.exe zestawu .NET Core SDK i może przywracać tylko pakiety określone w plikach projektu .csproj platformy .NET Core.

Jeśli masz również projekt programu Microsoft .NET Framework w rozwiązaniu lub użyj polecenia package.json , aby określić zależności, użyj zadania NuGet , aby przywrócić te zależności.

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

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 platformy .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 buforowania pakietów NuGet przy użyciu usługi Azure Artifacts, zobacz Połączenie do źródeł 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 poświadczeniami, tworząc połączenie usługi NuGet na karcie Usługi w obszarze Project Ustawienia.

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, możesz użyć usługi Azure Artifacts lub własnego agenta z korzyścią korzystania z pamięci podręcznej pakietu.

Aby uzyskać więcej informacji na temat połączeń usługi NuGet, zobacz publikowanie w kanałach informacyjnych 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 przy użyciu edytora potoku YAML, bezpośrednio wstawiając poniższy fragment kodu do azure-pipelines.yml pliku lub używając asystenta zadań w celu dodania zadania platformy .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 w pliku określono NuGet.config źródło danych niestandardowych i że poświadczenia są określone w połączeniu usługi NuGet.

Kompilowanie projektu

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

Kompilacja platformy .NET Core przy użyciu zadania platformy .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 wiersza 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ń interfejsu wiersza polecenia dotnet do potoku. Zadania platformy .NET Core można dodać, edytując plik YAML lub używając edytora klasycznego.

Dodawanie polecenia interfejsu wiersza polecenia platformy .NET przy użyciu zadania platformy .NET Core

Aby dodać polecenie interfejsu wiersza polecenia platformy .NET Core przy użyciu edytora potoku YAML, wykonaj następujące czynności:

  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ę.

Dodawanie polecenia interfejsu wiersza polecenia platformy .NET Core przy użyciu 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.
    • Polecenie niestandardowe: narzędzie.
    • Argumenty: install -g dotnetsay.
  2. Aby uruchomić narzędzie, dodaj wiersz polecenia i ustaw następujące właściwości:
    • Script: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ć dotnet test polecenie, określ opcje rejestratora wyników testów i 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'

Zbieranie metryk pokrycia kodu za pomocą coverletu

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 Publikuj wyniki pokrycia kodu (PublishCodeCoverageResults@1). Narzędzie pokrycia musi być skonfigurowane do generowania wyników w formacie pokrycia Cobertura lub JaCoCo.

Aby uruchomić testy i opublikować pokrycie kodu za pomocą rozwiązania 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@1
      displayName: 'Publish code coverage report'
      inputs:
        codeCoverageTool: 'Cobertura'
        summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
    

Pakowanie 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 polecenie dotnet publish --output $(Build.ArtifactStagingDirectory) publikowania w interfejsie wiersza polecenia platformy .NET lub dodaj zadanie DotNetCoreCLI@2 .
  • 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.

Publikowanie w kanale informacyjnym 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 interfejsu API NuGet, użyj zadania NuGetCommand@2 z command zestawem danych wejściowych z push argumentem --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 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 wypychanie do rejestru kontenerów

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

Symbole publikowania

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ę Źródła indeksu publikują symbole z wykazu zadań, aby dodać je do potoku.

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. Aby wydrukować wersję zestawu .NET Core SDK, możesz dołączyć skrypt dotnet --version wiersza polecenia w potoku. 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żesz użyć logiki w środowisku IDE programu Visual Studio, który nie jest zakodowany w potoku. Usługa Azure Pipelines uruchamia każde z poleceń, które są określone w zadaniach po drugim w nowym 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 występują problemy lub występują problemy z siecią między centrum danych platformy Azure i NuGet.org. Możesz sprawdzić, czy używanie usługi Azure Artifacts z NuGet.org jako nadrzędnego źródła zwiększa niezawodność kompilacji, ponieważ nie jest to nasza kontrola.

  • Czasami nowa wersja zestawu .NET Core SDK lub Visual Studio jest wdrażana, kompilacja może ulec awarii. Na przykład nowsza wersja lub funkcja narzędzia NuGet jest dostarczana z zestawem SDK może spowodować przerwanie 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

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

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

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

1: Narzędzia interfejsu wiersza polecenia platformy .NET Core

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

1: Testowanie jednostkowe w projektach platformy .NET Core

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

1: Zadania kompilacji i wydawania