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


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

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

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

Примечание.

Для получения помощи с проектами на платформе .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. Чтобы зафиксировать новый файл 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 без необходимости настройки инфраструктуры.

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

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 Artifacts, NuGet.org или какого-нибудь другого внешнего или внутреннего репозитория NuGet. Задача .NET Core особенно полезна для восстановления пакетов из аутентифицированных веб-каналов NuGet. Если ваш фид находится в том же проекте, что и конвейер, вам не нужно проходить аутентификацию.

Конвейер использует канал артефактов 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, поставляемый с .NET Core SDK, и может восстанавливать только пакеты, указанные в файлах проекта .csproj .NET Core.

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

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

Примечание.

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

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

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

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

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

Замените <placeholder> на имя подключения вашей службы.

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

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

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

Результаты покрытия кода можно опубликовать на сервере, используя задачу Публикация результатов покрытия кода (PublishCodeCoverageResults@2). Средство покрытия должно быть настроено для создания результатов в формате покрытия 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@2
      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 CLI или добавьте задачу DotNetCoreCLI@2 с командой publish.
  • Опубликуйте артефакт с помощью задачи "Публикация артефакта конвейера".

Добавьте следующий фрагмент кода в 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, установленным на push, и аргументом --api-key. Например, dotnet nuget push --api-key $(NuGetApiKey).

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

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

Пакеты NuGet можно опубликовать в потоке Артефактов Azure с помощью NuGetCommand@2, чтобы отправить их в этот поток. Например, см. статью "Публикация пакетов 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. Вам не нужно ждать завершения этого развертывания. Вы можете использовать задачу Use .NET Core для установки нужной версии пакета .NET Core SDK на агентах, хостируемых Microsoft.
  • Проверьте версии пакета 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 Build для сборки проектов на платформе .NET Framework.

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

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

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

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

A: Управление пакетами в Azure Artifacts

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

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

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

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

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

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