Создание, тестирование и развертывание проектов .NET Core

Сервисы Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

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

  • Создайте веб-приложение .NET Core и отправьте его в репозиторий GitHub.
  • Создайте проект Azure DevOps и конвейер Azure Pipelines для сборки проекта.
  • Настройте среду сборки с помощью локальных агентов.
  • Восстановление зависимостей, сборка проекта и тестирование с помощью задачи .NET Core (DotNetCoreCLI@2) или скрипта.
  • Используйте задачу .NET Core (DotNetCoreCLI@2) для добавления других команд пакета SDK для .NET в конвейер.
  • Используйте задачу "Опубликовать результаты покрытия кода " (Publish code coverage results v2) для публикации результатов покрытия кода.
  • Упаковайте и доставьте выходные данные сборки в конвейер, веб-канал NuGet, ZIP-архив или другие целевые объекты.
  • Создайте веб-приложение .NET Core и отправьте его в репозиторий GitHub.
  • Создайте проект Azure DevOps и конвейер Azure Pipelines для сборки проекта.
  • Настройте среду сборки с помощью агентов, размещенных в Microsoft, или собственных агентов.
  • Восстановление зависимостей, сборка проекта и тестирование с помощью задачи .NET Core (DotNetCoreCLI@2) или скрипта.
  • Используйте задачу .NET Core (DotNetCoreCLI@2) для добавления других команд пакета SDK для .NET в конвейер.
  • Используйте задачу "Опубликовать результаты покрытия кода " (Publish code coverage results v2) для публикации результатов покрытия кода.
  • Упаковайте и доставьте выходные данные сборки в конвейер, веб-канал NuGet, ZIP-архив или другие целевые объекты.

Примечание.

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

Предварительные условия

Для выполнения всех процедур, описанных в этой статье, необходимо выполнить следующие предварительные требования:

Для выполнения всех процедур, описанных в этой статье, необходимо выполнить следующие предварительные требования:

  • Коллекция Azure DevOps.
  • Проект Azure DevOps, созданный в организации. Инструкции см. в статье "Создание проекта в Azure DevOps".
  • Членство в группе "Project Administrators", чтобы можно было создавать проекты Azure DevOps и предоставлять конвейерам доступ к проекту. Владельцы организации Azure DevOps автоматически имеют это членство.
  • Роль Администратора или Создателя для подключений служб, которую можно назначить, будучи администратором проекта.
  • Учетная запись и репозиторий GitHub .

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

Если вы хотите использовать проект .NET, который уже находится в репозитории GitHub, можно пропустить этот раздел.

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

  1. Установите пакет SDK для .NET 8.0 или убедитесь, что он установлен.
  2. Откройте окно терминала на локальном компьютере.
  3. Создайте каталог проекта и перейдите к нему.
  4. Создайте веб-приложение .NET 8, выполнив команду dotnet new webapp -f net8.0.
  5. Выполните сборку и запуск приложения локально с помощью dotnet run.
  6. Когда приложение запускается, нажмите клавиши CTRL+C, чтобы завершить работу приложения.
  7. Отправьте или подключите локальный проект к репозиторию GitHub.

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

Если у вас есть конвейер, который вы хотите использовать, можно пропустить этот раздел. В противном случае для создания конвейера можно использовать редактор конвейера YAML или классический редактор.

  1. В проекте Azure DevOps выберите Pipelines в меню навигации слева.

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

  3. На экране " Где находится код " выберите GitHub.

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

  5. На экране "Выбор репозитория" выберите репозиторий , в который находится приложение .NET.

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

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

    Вы также можете выбрать начальный конвейер на вкладке Настройка, чтобы начать с минимального конвейера и самостоятельно добавить шаги и настройки.

  2. На вкладке "Проверка " проверьте код YAML. Файл можно настроить для ваших требований. Например, можно указать другой пул агентов или добавить задачу для установки другого пакета SDK для .NET.

  1. В проекте Azure DevOps выберите Pipelines в меню навигации слева.

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

  3. Выберите тип исходного репозитория. В этом примере используйте GitHub Enterprise Server.

  4. На следующем экране введите следующие сведения:

    • URL-адрес учетной записи GitHub, например https://github.com/myname.
    • Личный маркер доступа GitHub (PAT).
    • Имя подключения к службе, например, my-github.
  5. Нажмите кнопку создания.

  6. Выберите репозиторий GitHub.

  7. На вкладке "Настройка" выберите "Показать больше " и выберите шаблон конвейера ASP.NET Core из списка. Этот шаблон содержит множество шагов и параметров, описанных в этой статье.

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

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

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

  2. При необходимости измените сообщение коммита, а затем ещё раз нажмите Сохранить и запустить.

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

Теперь у вас есть рабочий конвейер, готовый к настройке.

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

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

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

Примечание.

Для агентов, работающих в физических системах, установка пакетов SDK и средств через конвейер изменяет среду сборки на узле агента.

В следующем примере фрагмент кода YAML устанавливает пакет SDK для .NET 8.0.x:

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

Чтобы установить более новую версию SDK, задайте для performMultiLevelLookup значение true.

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

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

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

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

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

Следующий фрагмент кода конвейера YAML задает ОС Ubuntu для пула агентов.

pool:
  vmImage: 'ubuntu-latest' 

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

Например, следующий код устанавливает пакет SDK для .NET 8.0.x:

steps:
- task: UseDotNet@2
  inputs:
    version: '8.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

Локальные агенты

Кроме того, можно использовать локальные агенты для создания проектов .NET Core. Вы можете настроить локальные агенты Linux, macOS или Windows .

С помощью локальных агентов можно:

  • Избегайте расходов на запуск установщика UseDotNet@2инструмента.
  • Уменьшите время сборки, если у вас есть большой репозиторий.
  • Выполнение добавочных сборок.
  • Используйте предварительные версии или частные пакеты SDK, которые корпорация Майкрософт официально не поддерживает.
  • Используйте пакеты SDK, доступные только в корпоративных или локальных средах.

Дополнительные сведения см. в разделе "Локальные агенты".

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

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

Используйте задачу .NET Core (DotNetCoreCLI@2) для скачивания и восстановления пакетов NuGet из Azure Artifacts, NuGet.org или другого аутентифицированного внешнего или внутреннего репозитория NuGet. Если источник NuGet находится в том же проекте, что и ваш конвейер, вам не нужно проходить аутентификацию. Дополнительные сведения см. в статье о задаче .NET Core (DotNetCoreCLI@2).

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

Следующий конвейер использует задачу DotNetCoreCLI@2 для восстановления пакетов из канала Azure Artifacts.

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

.NET автоматически восстанавливает пакеты при выполнении таких команд, как dotnet build. Вам по-прежнему нужно использовать задачу .NET Core (DotNetCoreCLI@2) для восстановления пакетов, если вы используете канал пакетов, требующий аутентификации.

Управляйте учетными данными для аутентифицированного веб-канала, создав подключение к службе NuGet в разделе Параметры проекта>Конвейеры>Подключения служб. Дополнительные сведения о подключениях к службе NuGet см. в статье "Публикация пакетов NuGet с помощью Azure Pipelines".

Восстановление пакетов из NuGet.org

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

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

Добавьте задачу .NET CoreDotNetCoreCLI@2 () непосредственно, вставив следующий фрагмент кода в файл azure-pipelines.yml перед задачами сборки.

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

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

  1. Перейдите в положение в YAML-файле, где вы хотите вставить задачу.
  2. Выберите .NET Core из каталога задач.
  3. На экране конфигурации выберите восстановление из раскрывающегося списка команд .
  4. В поле "Путь к проектам" или "решения" введите путь к файлам *.csproj . Подстановочный знак **/*.csproj можно использовать для всех файлов *.csproj во всех вложенных папках.
  5. Для пункта Добавляемые источники убедитесь, что выбраны параметры Источник(и), которые я выбираю здесь и Использовать пакеты из NuGet.org.
  6. Выберите Добавить.
  7. Выберите "Проверить и сохранить", а затем нажмите кнопку "Сохранить ", чтобы зафиксировать изменение.

Восстановление пакетов из внешнего хранилища

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

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

Добавьте задачу .NET CoreDotNetCoreCLI@2 () непосредственно, вставив следующий фрагмент кода в файл azure-pipelines.yml перед задачами сборки. Замените <NuGet service connection> именем подключения службы.

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>

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

  1. Добавьте задачу .NET Core и выберите восстановление на экране конфигурации, как показано в предыдущей процедуре.
  2. Для источников для добавления выберите источники в моем NuGet.config.
  3. В разделе "Путь к NuGet.config" введите путь к файлу NuGet.config относительно корневого каталога репозитория. Вы можете нажать кнопку с многоточием ... рядом с полем, чтобы указать путь и выбрать нужное местоположение.
  4. В разделе "Учетные данные для веб-каналов за пределами этой организации или коллекции" выберите учетные данные для внешних реестров в выбранном файле NuGet.config . Для каналов в той же организации оставьте это поле пустым. Учетные данные сборки используются автоматически.

Восстановление пакетов для проектов .NET Framework

Если решение включает проект .NET Framework или используетсяpackage.json для указания зависимостей, используйте задачу NuGetCommand@2 для восстановления этих зависимостей.

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

Примечание.

Для Ubuntu 24.04 или более поздней версии необходимо использовать задачу NuGetAuthenticate вместо задачи NuGetCommand@2 с помощью .NET CLI. Дополнительные сведения см. в статье "Поддержка новых размещенных образов Ubuntu".

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

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

Используйте задачу .NET Core

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

Добавьте задачу .NET CoreDotNetCoreCLI@2 () непосредственно, вставив следующий фрагмент кода. Обновите arguments в соответствии с вашими потребностями.

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

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

  1. Перейдите в положение в YAML-файле, где вы хотите вставить задачу.
  2. Выберите задачу .NET Core (DotNetCoreCLI@2).
  3. Выберите сборку из раскрывающегося списка команд .
  4. В поле "Путь к проектам" или "решения" введите путь к файлам *.csproj . Подстановочный знак **/*.csproj можно использовать для всех файлов *.csproj во всех вложенных папках.
  5. Выберите Добавить.
  6. Нажмите кнопку "Сохранить", чтобы зафиксировать изменение.

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

Можно также создать с помощью скрипта командной строки.

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

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

Вы также можете воспользоваться помощником задач, чтобы добавить задачу Command line.

  1. Перейдите в положение в YAML-файле, где вы хотите вставить задачу.
  2. Выберите задачу командной строки (CmdLine@2) из списка.
  3. В поле "Скрипт" введите dotnet build команду с параметрами. Например, dotnet build --configuration $(buildConfiguration).
  4. В разделе "Расширенный>рабочий каталог" введите путь к файлу *.csproj в качестве рабочего каталога. Если оставить его пустым, рабочий каталог по умолчанию используется $(Build.SourcesDirectory).
  5. Выберите Добавить.
  6. Нажмите кнопку "Сохранить", чтобы зафиксировать изменение.

Добавление других команд пакета SDK для .NET в конвейер

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

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

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

Чтобы добавить команду .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, добавьте задачу .NET Core и задайте следующие свойства в конфигурации:

  • Команда: настраиваемая
  • Путь к проектам: оставьте пустым
  • Настраиваемая команда: tool
  • Аргументы: install -g dotnetsay

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

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

Если репозиторий содержит тестовые проекты, используйте задачу .NET Core (DotNetCoreCLI@2) для выполнения модульных тестов с помощью платформ тестирования, таких как MSTest, xUnit и NUnit. Тестовый проект должен ссылаться на Microsoft.NET.Test.SDK версии 15.8.0 или более поздней.

Служба автоматически публикует результаты теста. Их можно увидеть в сводке по сборке. Используйте результаты теста для устранения неполадок неудачных тестов и анализа времени тестирования.

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

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

Если вы используете помощник по задачам для добавления задачи .NET Core (DotNetCoreCLI@2) , задайте следующие свойства:

  • Команда: тест
  • Путь к проектам: настройка тестовых проектов в решении
  • Аргументы: --configuration $(BuildConfiguration)

Кроме того, выполните dotnet test команду с определенным логгером, затем используйте 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'

Сбор данных о покрытии кода

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

При использовании задачи .NET Core (DotNetCoreCLI@2) для выполнения тестов конвейер автоматически публикует данные покрытия на сервере. Файл *.coverage можно скачать из сводки сборки, чтобы просмотреть в Visual Studio.

Чтобы собрать данные о покрытии кода, добавьте аргумент --collect "Code Coverage" при добавлении задачи тестирования в конвейер.

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

Если вы используете помощник по задачам для добавления задачи .NET Core (DotNetCoreCLI@2) , задайте следующие свойства:

  • Команда: тест
  • Путь к проектам: настройка тестовых проектов в решении
  • Аргументы: --configuration $(BuildConfiguration) --collect "Code Coverage"

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

В качестве альтернативы, чтобы собрать результаты покрытия кода с помощью команды dotnet test с указанным средством ведения журнала, а затем запустить задачу PublishTestResults@2, используйте следующий код:

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'

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

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

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

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

  1. Добавьте ссылку на пакет NuGet coverlet.collector.
  2. Добавьте следующий фрагмент кода в файл azure-pipelines.yml . Не добавляйте дополнительные DataCollectionRunSettings аргументы, так как XPlat Code Coverage сборщик уже формирует отчет Cobertura.
- 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:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'

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

Чтобы упаковать и доставить выходные данные сборки, можно:

  • Опубликуйте артефакты сборки в Azure Pipelines.
  • Создайте пакет NuGet и опубликуйте его в веб-канале NuGet.
  • Опубликуйте пакет NuGet в Azure Artifacts.
  • Создайте ZIP-архив для развертывания в веб-приложении.
  • Публикация символов в сервере символов Azure Artifacts или общей папке.

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

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

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

  1. Запустите dotnet publish --output $(Build.ArtifactStagingDirectory) с помощью .NET CLI или добавьте задачу .NET Core (DotNetCoreCLI@2) с помощью команды публикации .
  2. Используйте задачу Publish Pipeline Artifact (PublishPipelineArtifact@1) для публикации артефакта. Эта задача загружает все файлы из $(Build.ArtifactStagingDirectory) как артефакт вашей сборки.

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

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

Примечание.

Параметр publishWebProjects в задаче .NET Core (DotNetCoreCLI@2) по умолчанию имеет значение true и публикует все веб-проекты в вашем репозитории. Дополнительные сведения см. в репозитории GitHub azure-pipelines-tasks.

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

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

Следующий azure-pipelines.yml код также публикует артефакты сборки в виде ZIP-файла. Задача PublishBuildArtifacts@1 передает все файлы из $(Build.ArtifactStagingDirectory) в качестве артефакта сборки.

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'

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

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

Чтобы создать пакет NuGet и опубликовать его в веб-канале NuGet, добавьте следующий фрагмент кода в файл 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

Примечание.

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

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

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

Вы можете опубликовать свои пакеты NuGet в свой канал Azure Artifacts с помощью задачи NuGetCommand@2. Дополнительные сведения см. в статье "Публикация пакетов NuGet с помощью Azure Pipelines".

Опубликовать ZIP-архив в веб-приложение

Чтобы создать ZIP-архив, готовый к публикации в веб-приложении, добавьте следующий фрагмент кода в azure-pipelines.yml. Выполните эту задачу после сборки приложения, как правило, ближе к концу конвейера. Например, выполните эту задачу перед развертыванием в веб-приложении Azure в Windows.

steps:
# ...
- 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 по всем центрам обработки данных Azure Pipelines может занять несколько недель. Вместо ожидания завершения развертывания используйте задачу Use .NET Core для установки той версии SDK для .NET Core, которую вы хотите, на размещенных корпорацией Майкрософт агентах.
  • Новая версия пакета SDK для .NET Core или Visual Studio может нарушить сборку. Например, он может содержать более новую версию или функцию средства NuGet. Убедитесь, что версии пакета SDK для .NET Core и среда выполнения на компьютере разработки соответствуют агенту конвейера.

    Вы можете включить в конвейер скрипт командной строки dotnet --version, чтобы вывести версию .NET Core SDK. Используйте установщик средств .NET Core для развертывания той же версии агента или обновления проектов и компьютера разработки до версии конвейера пакета SDK для .NET Core.

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

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

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

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