Сборка, тестирование и развертывание приложений .NET Core

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

Используйте Azure Pipeline для автоматического создания, тестирования и развертывания проектов .NET Core. В этой статье показано, как выполнять следующие задачи:

  • Настройте среду сборки с помощью локальных агентов.
  • Восстановление зависимостей, сборка проекта и тестирование с помощью задачи .NET Core (DotNetCoreCLI@2) или скрипта.
  • Протестируйте код и используйте задачу покрытия кода публикации для публикации результатов покрытия кода.
  • Упаковка и доставка выходных данных сборки:
  • Настройте среду сборки с помощью размещенных корпорацией Майкрософт или локальных агентов.
  • Восстановление зависимостей, сборка проекта и тестирование с помощью задачи .NET Core (DotNetCoreCLI@2) или скрипта.
  • Протестируйте код и используйте задачу покрытия кода публикации для публикации результатов покрытия кода.
  • Упаковка и доставка выходных данных сборки:

Примечание.

Сведения о платформа .NET Framework проектах см. в статье "Создание приложений ASP.NET с помощью платформа .NET Framework".

Необходимые компоненты

  • Учетная запись GitHub, в которой можно создать репозиторий. Создайте ее бесплатно.
  • Коллекция Azure DevOps.
  • Возможность запуска конвейеров на локальном агенте с установленным и запущенным на узле агента Docker.

Создание первого конвейера

Вы не знакомы с Azure Pipelines? В этом случае рекомендуется сначала попробовать следующий раздел.

Создание проекта .NET.

Если у вас нет проекта .NET для работы, создайте новый проект в локальной системе. Начните с установки последнего пакета SDK для .NET 8.0.

  1. Откройте окно терминала.

  2. Создайте каталог проекта и перейдите к нему.

  3. Создайте веб-приложение .NET 8.

    dotnet new webapp -f net8.0
    
  4. В том же сеансе терминала запустите приложение локально с помощью dotnet run команды из каталога проекта.

    dotnet run
    
  5. После запуска приложения нажмите клавиши CTRL-C, чтобы завершить работу приложения.

Создание репозитория Git и его подключение к GitHub

  1. В каталоге проекта создайте локальный репозиторий Git и зафиксируйте код приложения в главной ветви.

  2. Подключение локального репозитория Git в репозиторий GitHub.

Создание проекта DevOps

Войдите в Azure Pipelines. После входа в браузере откроется https://dev.azure.com/my-organization-name и отобразится панель мониторинга Azure DevOps.

  1. В браузере перейдите к dev.azure.com и войдите в систему.
  2. Выберите свою организацию.
  3. Создайте новый проект, выбрав новый проект или создав проект при создании первого проекта в организации.
  4. Заполните поле Имя проекта.
  5. Выберите видимость проекта.
  6. Нажмите кнопку создания.
  1. В браузере перейдите на сервер Azure DevOps Server.
  2. Выберите коллекцию.
  3. Создайте новый проект, выбрав новый проект или создав проект при создании первого проекта в коллекции.
  4. Заполните поле Имя проекта.
  5. Выберите видимость проекта.
  6. Нажмите кнопку создания.
  1. В окне браузера войдите на сервер Azure DevOps Server и выберите коллекцию.
  2. Выберите Создать проект.
  3. Введите имя проекта.
  4. Также можно ввести описание.
  5. Нажмите кнопку создания.

Настройка среды сборки

Сборки выполняются на локальных агентах. Убедитесь, что на агентах установлена необходимая версия пакета SDK для .NET Core и среды выполнения. Вы можете создавать проекты .NET Core с помощью пакета SDK для .NET Core и среды выполнения в Windows, Linux, macOS и Docker.

Вы можете установить определенную версию пакета SDK для .NET, добавив задачу UseDotNet@2 в файл YAML конвейера или добавив задачу в конвейер с помощью классического редактора.

Пример фрагмента КОДА YAML:

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

Сборки выполняются в агентах, размещенных корпорацией Майкрософт. Вы можете создавать проекты .NET Core с помощью пакета SDK для .NET Core и среды выполнения в Windows, Linux и macOS.

Кроме того, можно использовать локальный агент. С помощью локального агента можно использовать предварительные версии или частные пакеты SDK, которые официально не поддерживаются Azure DevOps Services и запускать добавочные сборки.

Создание конвейера

Для создания конвейера можно использовать редактор конвейера YAML или классический редактор. Чтобы использовать классический редактор, выберите "Использовать классический редактор".

Создание конвейера и выбор источника
  1. Войдите в свою организацию Azure DevOps и откройте нужный проект.

  2. Перейдите к конвейерам и выберите "Создать конвейер" или "Создать конвейер" при создании первого конвейера.

  3. Выполните все шаги мастера, выбрав GitHub в качестве расположения исходного кода.

  4. Возможно, вам придется выполнить вход в GitHub. Для этого введите учетные данные GitHub.

  5. Когда появится список репозиториев, выберите свой.

  6. Вы можете перенаправиться на GitHub, чтобы установить приложение Azure Pipelines. В этом случае выберите " Утвердить" и "Установить".

Настройка конвейера
  1. Когда появится вкладка "Настройка", выберите "Показать больше" и выберите шаблон конвейера ASP.NET Core из списка.

  2. Проверьте новый конвейер, чтобы узнать, что делает YAML.

Вы можете настроить YAML-файл для ваших требований. Например, можно указать пул агентов или добавить задачу для установки другого пакета SDK для .NET.

Сохранение и запуск конвейера
  1. Когда будете готовы, выберите Сохранить и запустить.

    Кнопка

  2. При необходимости можно изменить сообщение фиксации.

  3. Зафиксируйте новый файл azure-pipelines.yml в репозиторий, нажав кнопку "Сохранить и запустить".

  4. Чтобы просмотреть конвейер в действии, выберите задание в разделе "Задания ".

Создание и запуск конвейера

Конвейер можно создать с помощью редактора конвейера YAML или классического редактора.

  1. Перейдите в проект и выберите "Конвейеры".
  2. Выберите "Создать конвейер" или "Создать конвейер" при создании первого конвейера для этого проекта.
Выбор источника
  1. Выберите исходный репозиторий. В этом примере используйте GitHub Enterprise Server.

    1. Введите URL-адрес учетной записи GitHub. Например, https://github.com/<username>.
    2. Введите личный маркер доступа для учетной записи GitHub.
    3. Введите имя подключения службы. Например, my-github.
    4. Нажмите кнопку создания.
  2. Выберите репозиторий GitHub.

Настройка конвейера
  1. На вкладке "Настройка" выберите "Показать больше " и выберите шаблон конвейера ASP.NET Core из списка.

  2. Проверьте новый конвейер, чтобы узнать, что делает YAML.

Вы можете настроить YAML-файл для ваших требований. Например, можно добавить задачи для установки пакета SDK для .NET или тестирования и публикации проекта.

Сохранение и запуск конвейера
  1. Выберите Сохранить.

    Снимок экрана: кнопка

  2. Чтобы зафиксировать файл YAML конвейера в репозиторий, измените сообщение фиксации по мере необходимости и нажмите кнопку "Сохранить".

  3. Выберите "Выполнить", чтобы запустить конвейер.

Чтобы просмотреть журналы сборки при запуске конвейера, выберите номер сборки в верхней части страницы.

  1. Выберите Сохранить и выполнить.

    Снимок экрана: кнопка

  2. Чтобы зафиксировать новый файл azure-pipelines.yml в репозиторий, измените сообщение фиксации по мере необходимости и нажмите кнопку "Сохранить и запустить".

Чтобы просмотреть конвейер в действии, выберите задание в разделе "Задания ".

Теперь у вас есть рабочий конвейер, готовый к настройке! Дополнительные сведения о некоторых распространенных способах настройки конвейера.

Среда сборки

Azure Pipelines использует локальные агенты для создания проектов .NET Core. Убедитесь, что на агентах установлена необходимая версия пакета SDK для .NET Core и среды выполнения. Вы можете создавать проекты .NET Core с помощью пакета SDK для .NET Core и среды выполнения в Windows, Linux, macOS и Docker.

Например, чтобы выбрать возможности пула и агента в файле YAML конвейера:

Вы можете выбрать пул агентов и агент для задания сборки. Агенты задаются на основе их возможностей.

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

Вы можете установить определенную версию пакета SDK для .NET, добавив задачу UseDotNet@2 в конвейер. Помните, что для агентов, работающих в физических системах, установка пакетов SDK и средств с помощью конвейера изменяет среду сборки на узле агента.

Чтобы установить новый пакет SDK, задайте performMultiLevelLookup для true следующего фрагмента кода:

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

Azure Pipelines можно использовать для создания проектов .NET Core в Windows, Linux или macOS без необходимости настройки инфраструктуры.

Например, Ubuntu устанавливается здесь в файле YAML конвейера.

pool:
  vmImage: 'ubuntu-latest' 

Полный список образов и дополнительных примеров конфигурации см . в размещенных майкрософт агентах .

Размещенные корпорацией Майкрософт агенты в Azure Pipelines включают несколько предварительно установленных версий поддерживаемых пакетов SDK для .NET Core. Агенты, размещенные корпорацией Майкрософт, не включают некоторые из старых версий пакета SDK для .NET Core. Они также обычно не включают предварительные версии. Если вам нужны эти версии пакета SDK для агентов, размещенных корпорацией Майкрософт, установите их с помощью задачи UseDotNet@2 .

Например, чтобы установить пакет SDK 5.0.x, добавьте следующий фрагмент кода:

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

Агенты Windows уже включают среду выполнения .NET Core. Чтобы установить новый пакет SDK, задайте performMultiLevelLookup для true следующего фрагмента кода:

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

Совет

Чтобы сэкономить затраты на запуск установщика инструментов, можно настроить локальный агент Linux, macOS или Windows. Вы также можете использовать автономные агенты для экономии дополнительного времени, если у вас есть большой репозиторий или выполняется добавочная сборка. Локальный агент также может помочь вам использовать предварительные версии или частные пакеты SDK, которые официально не поддерживаются Azure DevOps или доступны только в корпоративных или локальных средах.

Восстановить зависимости

NuGet — это популярный способ зависеть от кода, который вы не создаете. Вы можете скачать пакеты NuGet и инструменты для конкретного проекта, указанные в файле проекта, выполнив dotnet restore команду с помощью задачи .NET Core или непосредственно в скрипте в конвейере. Дополнительные сведения см. в статье о задаче .NET Core (DotNetCoreCLI@2).

Пакеты NuGet можно скачать из Артефактов Azure, NuGet.org или другого внешнего или внутреннего репозитория NuGet. Задача .NET Core особенно полезна для восстановления пакетов из проверенных веб-каналов NuGet. Если веб-канал находится в том же проекте, что и конвейер, вам не нужно проходить проверку подлинности.

Этот конвейер использует веб-канал dotnet restore Артефакта Azure для задачи 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)'

Команда dotnet restore использует NuGet.exe пакет с пакетом пакета SDK для .NET Core и может восстанавливать только пакеты, указанные в файлах проекта .csproj .NET Core.

Если в решении также есть проект Microsoft платформа .NET Framework или используется package.json для указания зависимостей, используйте задачу NuGet для восстановления этих зависимостей.

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

В пакете SDK для .NET Core версии 2.0 и более поздних версий пакеты восстанавливаются автоматически при выполнении таких dotnet buildкоманд. Однако вам по-прежнему потребуется использовать задачу .NET Core для восстановления пакетов, если вы используете веб-канал, прошедший проверку подлинности.

Сборки могут завершиться ошибкой из-за проблем с подключением при восстановлении пакетов из NuGet.org. Для кэширования пакетов можно использовать артефакты Azure с вышестоящий источниками. Учетные данные конвейера автоматически используются при подключении к Артефактам Azure. Эти учетные данные обычно являются производными от учетной записи службы сборки коллекции проектов. Дополнительные сведения об использовании артефактов Azure для кэширования пакетов NuGet см. в Подключение веб-каналах Артефактов Azure.

Чтобы указать репозиторий NuGet, поместите URL-адрес в NuGet.config файл в репозиторий. Если веб-канал прошел проверку подлинности, управляйте учетными данными, создав подключение службы NuGet на вкладке "Службы" в разделе Project Параметры.

При использовании агентов, размещенных корпорацией Майкрософт, вы получаете новый компьютер при каждом запуске сборки, который восстанавливает пакеты при каждом запуске. Восстановление может занять значительное время. Чтобы устранить проблему, можно использовать Azure Artifacts или локальный агент с преимуществом использования кэша пакетов.

Дополнительные сведения о подключениях к службе NuGet см. в публикации в веб-каналах NuGet.

Восстановление пакетов из внешнего веб-канала

Выполните следующие действия, чтобы восстановить пакеты из внешнего веб-канала.

Вы можете добавить команду восстановления в конвейер с помощью редактора конвейера YAML, вставив следующий фрагмент кода в azure-pipelines.yml файл или используя задачу помощник, чтобы добавить задачу .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>

Замените <заполнитель> именем подключения службы.

Чтобы использовать задачу помощник, выполните следующие действия.

Чтобы добавить задачу сборки с помощью помощник задачи, сделайте следующее:

  1. Перейдите в положение в YAML-файле, где вы хотите вставить задачу.

  2. Выберите .NET Core из каталога задач.

  3. Выберите команду восстановления из раскрывающегося списка команд.

  4. В поле "Путь к проектам" введите путь к .csproj файлам.

  5. Выберите Добавить.

  6. Нажмите кнопку "Сохранить", чтобы зафиксировать изменение.

Примечание.

Убедитесь, что в файле указан NuGet.config пользовательский веб-канал, а учетные данные указаны в подключении службы NuGet.

Сборка проекта

Создайте проекты .NET Core, выполнив dotnet build команду. Вы можете добавить команду в конвейер в качестве скрипта командной строки или с помощью задачи .NET Core.

Сборка .NET Core с помощью задачи .NET Core

Пример YAML для сборки с помощью задачи DotNetCoreCLI@2:

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

Вы можете добавить задачу сборки с помощью редактора конвейера YAML, непосредственно изменив файл или добавив задачу .NET Core с помощью помощник задачи.

Чтобы добавить задачу сборки с помощью помощник задачи, сделайте следующее:

  1. Перейдите в положение в YAML-файле, где вы хотите вставить задачу.

  2. Выберите .NET Core из каталога задач.

  3. Выберите команду сборки из раскрывающегося списка команд.

  4. В поле "Путь к проектам" введите путь к .csproj файлам.

  5. Выберите Добавить.

  6. Нажмите кнопку "Сохранить", чтобы зафиксировать изменение.

Сборка .NET Core с помощью скрипта командной строки

Пример YAML для сборки с помощью dotnet build скрипта:

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

Вы можете добавить задачу сборки с помощью редактора конвейера YAML, непосредственно изменив файл или добавив задачу командной строки .

Чтобы добавить задачу командной строки , выполните следующие действия.

  1. Перейдите в положение в YAML-файле, где вы хотите вставить задачу.

  2. Выберите командную строку из каталога задач.

  3. При необходимости добавьте отображаемое имя.

  4. Введите команду с параметрами dotnet build . Например, dotnet build --configuration $(buildConfiguration).

  5. Введите путь к .csproj файлу в качестве рабочего каталога.

  6. Выберите Добавить.

  7. Нажмите кнопку "Сохранить", чтобы зафиксировать изменение.

Добавление команд ПАКЕТА SDK для .NET в конвейер

Команды SDK для .NET можно добавить в проект в качестве скрипта или с помощью задачи .NET Core. Задача .NET Core (DotNetCoreCLI@2) позволяет легко добавлять команды dotnet CLI в конвейер. Задачи .NET Core можно добавить, изменив файл YAML или используя классический редактор.

Добавление команды .NET CLI с помощью задачи .NET Core

Чтобы добавить команду CLI .NET Core с помощью редактора конвейера YAML, сделайте следующее:

  1. Перейдите в положение в YAML-файле, где вы хотите вставить задачу.

  2. Выберите .NET Core из каталога задач.

  3. Выберите команду, которую вы хотите выполнить.

  4. Настройте все необходимые параметры.

  5. Выберите Добавить.

  6. Нажмите кнопку "Сохранить", чтобы зафиксировать изменение.

Добавление команды .NET Core CLI с помощью скрипта

Команды CLI .NET Core можно добавить в script файл.azure-pipelines.yml

Пример:


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

Установка средства

Чтобы установить глобальное средство .NET Core, например dotnetsay в сборке, работающей в Windows, сделайте следующее:

  1. Добавьте задачу .NET Core и задайте следующие свойства:
    • Команда: custom.
      • Путь к проектам: оставьте пустым.
    • Настраиваемая команда: инструмент.
    • Аргументы: install -g dotnetsay.
  2. Чтобы запустить средство, добавьте командную строку и задайте следующие свойства:
    • Скрипт:dotnetsay.

Запуск тестов

При наличии тестовых проектов в репозитории можно использовать задачу .NET Core для выполнения модульных тестов с помощью платформ тестирования, таких как MSTest, xUnit и NUnit. Тестовый проект должен ссылаться на Microsoft.NET.Test.SDK версии 15.8.0 или более поздней. Результаты теста автоматически публикуются в службе. Эти результаты доступны в сводке сборки и могут использоваться для устранения неполадок неудачных тестов и анализа времени тестирования.

Вы можете добавить тестовую задачу в конвейер с помощью задачи DotNetCoreCLI@2 или добавить следующий фрагмент кода в azure-pipelines.yml файл:

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

При использовании редактора задач .NET Core задайте команду для тестирования и пути к проектам, которые должны ссылаться на тестовые проекты в решении.

Кроме того, можно выполнить dotnet test команду с определенным средством ведения журнала, а затем использовать задачу "Опубликовать результаты теста".

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'

Сбор покрытия кода

При создании на платформе Windows метрики покрытия кода можно собирать с помощью встроенного сборщика данных покрытия. Тестовый проект должен ссылаться на Microsoft.NET.Test.SDK версии 15.8.0 или более поздней.

При использовании задачи .NET Core для выполнения тестов данные покрытия автоматически публикуются на сервере. Файл .coverage можно скачать из сводки сборки для просмотра в Visual Studio.

Добавьте следующий фрагмент кода в 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"'

Чтобы добавить задачу .NET Core через редактор задач, выполните следующие действия.

  1. Добавьте задачу .NET Core в задание сборки и задайте следующие свойства:

    1. Команда: тест.
    2. Путь к проектам: должен ссылаться на тестовые проекты в решении.
    3. Аргументы: --configuration $(BuildConfiguration) --collect "Code coverage".
  2. Убедитесь, что параметр "Опубликовать результаты теста" остается выбранным.

Если вы решили выполнить dotnet test команду, укажите параметры ведения журнала результатов теста и покрытия. Затем используйте задачу "Опубликовать результаты теста":

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'

Сбор метрик покрытия кода с помощью Coverlet

Если вы используете Linux или macOS, можно использовать обложку или аналогичное средство для сбора метрик покрытия кода.

Результаты покрытия кода можно опубликовать на сервере с помощью задачи "Результаты покрытия кода публикации" (PublishCodeCoverageResults@1). Средство покрытия должно быть настроено для создания результатов в формате покрытия Cobertura или JaCoCo.

Чтобы выполнить тесты и опубликовать покрытие кода с помощью Coverlet, выполните следующие задачи:

  • Добавьте ссылку на пакет NuGet coverlet.collector.

  • Добавьте следующий фрагмент кода в 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'
    

Упаковка и доставка кода

Артефакты сборки можно опубликовать следующими способами:

  • Публикация в Azure Pipelines.
  • Публикация пакетов в Azure Artifacts.
  • Создание пакета NuGet и публикация в веб-канале NuGet.
  • Создание архива .zip для развертывания веб-приложения.

Публикация артефактов в Azure Pipelines

Чтобы опубликовать выходные данные сборки .NET в конвейере, выполните следующие задачи:

  • Запустите dotnet publish --output $(Build.ArtifactStagingDirectory) интерфейс командной строки .NET или добавьте задачу DotNetCoreCLI@2 с помощью команды публикации.
  • Опубликуйте артефакт с помощью задачи "Публикация артефакта конвейера".

Добавьте следующий фрагмент кода в 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'

Примечание.

Задача DotNetCoreCLI@2 имеет входные publishWebProjects данные, которые по умолчанию имеют значение true . Эта задача публикует все веб-проекты в репозитории по умолчанию. Дополнительные сведения и справку можно найти в задаче открытый код на сайте GitHub.

Чтобы скопировать дополнительные файлы в каталог сборки перед публикацией, используйте задачу копирования файлов (CopyFile@2).

Чтобы опубликовать выходные данные сборки .NET в конвейере, выполните следующие задачи:

Добавьте следующий фрагмент кода в azure-pipelines.yml файл, чтобы опубликовать артефакты сборки в виде файла .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'

Дополнительные сведения см. в статье "Публикация и скачивание артефактов сборки".

Публикация в веб-канале NuGet

Чтобы создать пакет NuGet и опубликовать его в веб-канале NuGet, добавьте следующий фрагмент кода:

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

Примечание.

Задача NuGetAuthenticate@1 не поддерживает проверку подлинности ключа API NuGet. Если вы используете ключ API NuGet, используйте задачу NuGetCommand@2 с входным набором с command аргументом --api-key.push Например, dotnet nuget push --api-key $(NuGetApiKey).

Дополнительные сведения об использовании версий и публикации пакетов NuGet см. в статье "Публикация в веб-каналах NuGet".

Публикация пакета NuGet в Артефактах Azure

Пакеты NuGet можно опубликовать в веб-канале Артефактов Azure с помощью NuGetCommand@2 для отправки в веб-канал Артефакта Azure. Например, см. статью "Публикация пакетов NuGet с помощью Azure Pipelines".

Развертывание веб-приложения

Чтобы создать архив файла .zip, готовый к публикации в веб-приложении, добавьте следующий фрагмент кода:

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

Сведения о публикации этого архива в веб-приложении см. в статье веб-приложения развертывании Azure.

Создание образа и отправка в реестр контейнеров

Вы также можете создать образ для приложения и отправить его в реестр контейнеров.

Публикация символов

Задачу PublishSymbols@2 можно использовать для публикации символов на сервере символов Azure Artifacts или общей папке.

Например, чтобы опубликовать символы в общей папке, добавьте следующий фрагмент кода в azure-pipelines.yml файл:

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

При использовании классического редактора выберите источники индекса, чтобы добавить в конвейер символы из каталога задач.

Дополнительные сведения см. в разделе "Публикация символов".

Устранение неполадок

Если вы можете создать проект на компьютере разработки, но у вас возникли проблемы с его сборкой в Azure Pipelines, изучите следующие потенциальные причины и корректирующие действия:

  • Предварительные версии пакета SDK для .NET Core не устанавливаются в агенты, размещенные корпорацией Майкрософт. После выпуска новой версии пакета SDK для .NET Core может потребоваться несколько недель, чтобы развернуть все центры обработки данных Azure Pipelines. Вам не нужно ждать завершения этого развертывания. Вы можете использовать задачу .NET Core для установки версии пакета SDK для .NET Core , которую вы хотите использовать в агентах, размещенных в Майкрософт.
  • Проверьте версии пакета SDK для .NET Core и среду выполнения на компьютере разработки и убедитесь, что они соответствуют агенту. Скрипт командной строки dotnet --version можно включить в конвейер, чтобы распечатать версию пакета SDK для .NET Core. Используйте установщик средств .NET Core для развертывания той же версии на агенте или обновите проекты и компьютер разработки до более новой версии пакета SDK для .NET Core.

  • Возможно, вы используете некоторую логику в интегрированной среде разработки Visual Studio, которая не закодирована в конвейере. Azure Pipelines выполняет каждую из команд, указанных в задачах после другой в новом процессе. Просмотрите журналы из сборки конвейеров, чтобы увидеть точные команды, которые выполнялись как часть сборки. Повторите те же команды в том же порядке на компьютере разработки, чтобы найти проблему.

  • Если у вас есть смешанное решение, включающее некоторые проекты .NET Core и некоторые платформа .NET Framework проекты, необходимо также использовать задачу NuGet для восстановления пакетов, указанных в packages.config файлах. Добавьте задачу сборки MSBuild или Visual Studio, чтобы создать проекты платформа .NET Framework.

  • Сборки могут завершиться сбоем при восстановлении пакетов: NuGet.org возникают проблемы или возникают проблемы с сетью между центром обработки данных Azure и NuGet.org. Вы можете изучить, повышает ли использование артефактов Azure с NuGet.org в качестве источника вышестоящий повысить надежность сборок, так как она не находится в нашем элементе управления.

  • Иногда при развертывании новой версии пакета SDK для .NET Core или Visual Studio сборка может нарушиться. Например, более новая версия или функция средства NuGet поставляется с пакетом SDK, может нарушить сборку. Чтобы изолировать эту проблему, используйте задачу установщика инструментов .NET Core, чтобы указать версию пакета SDK для .NET Core, используемого в сборке.

Вопросы и ответы

Вопрос. Где можно узнать больше о артефактах Azure?

Ответ. Управление пакетами в артефактах Azure

Вопрос. Где можно узнать больше о командах .NET Core?

Ответ. Средства командной строки .NET Core

Вопрос. Где можно узнать больше о выполнении тестов в моем решении?

Ответ. Модульное тестирование в проектах .NET Core

Вопрос. Где можно узнать больше о задачах?

Ответ. Создание и выпуск задач