Поделиться через


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

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

В этой статье описывается, как использовать 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 для сборки проекта.
  • Настройте среду сборки с помощью размещенных корпорацией Майкрософт или локальных агентов.
  • Восстановление зависимостей, сборка проекта и тестирование с помощью задачи .NET Core (DotNetCoreCLI@2) или скрипта.
  • Используйте задачу .NET Core (DotNetCoreCLI@2) для добавления других команд пакета SDK для .NET в конвейер.
  • Используйте задачу "Опубликовать результаты покрытия кода " (Publish code coverage results v2) для публикации результатов покрытия кода.
  • Упаковайте и доставьте выходные данные сборки в конвейер, веб-канал NuGet, ZIP-архив или другие целевые объекты.

Примечание.

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

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

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

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

Создание проекта .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 . Этот шаблон содержит множество шагов и параметров, описанных в этой статье.

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

  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. Полный список доступных образов и примеров конфигурации см. в размещенных майкрософт агентах .

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

pool:
  vmImage: 'ubuntu-latest' 

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

Например, следующий код устанавливает пакет SDK для .NET 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

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

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

Локальные агенты позволяют вам:

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

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

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

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

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

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

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

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

В пакете SDK для .NET Core версии 2.0 и более поздних версий пакеты автоматически восстанавливаются при выполнении таких 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

Если в решении также есть проект Microsoft .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)'

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

  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 можно использовать обложку или аналогичное средство для сбора метрик покрытия кода.

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

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

  1. Добавьте ссылку на пакет NuGet coverlet.collector.
  2. Добавьте следующий фрагмент кода в файл azure-pipelines.yml :
- 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: '<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. Опубликуйте артефакт с помощью задачи "Публикация артефакта конвейера" (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 задачу с входным набором commandpush и аргументом --api-key . Например, dotnet nuget push --api-key $(NuGetApiKey).

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

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

Пакеты NuGet можно опубликовать в веб-канале Артефактов Azure с помощью задачи 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 или в общей папке. Дополнительные сведения см. в разделе "Публикация символов".

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

    Скрипт командной строки можно включить dotnet --version в конвейер, чтобы распечатать версию пакета SDK для .NET Core. Используйте установщик средств .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.