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


Использование пакета SDK для .NET в средах непрерывной интеграции (CI)

В этой статье описывается, как использовать пакет SDK для .NET и его средства на сервере сборки. Набор инструментов .NET работает в интерактивном режиме, где команды разработчика выполняются в командной строке и автоматически, где сервер непрерывной интеграции (CI) выполняет скрипт сборки. Команды, параметры, входные и выходные данные совпадают. В этом случае нужно только указать способ получения средств и систему сборки приложения. В этой статье рассматриваются сценарии приобретения средств для CI с рекомендациями по проектированию и структуре скриптов сборки.

Варианты установки для серверов сборки CI

Если вы используете GitHub, установка выполняется просто. Вы можете использовать GitHub Actions для установки пакета SDK для .NET в рабочем процессе. Рекомендуемый способ установки пакета SDK для .NET в рамках рабочего процесса — это действие actions/setup-net-core-sdk. Для получения дополнительной информации см. действие Setup .NET Core SDK в GitHub Marketplace. Примеры того, как это работает, см. в кратком руководстве Создание рабочего процесса проверки сборки GitHub.

Родные установщики

В macOS, Linux и Windows доступны собственные установщики. Установщики требуют доступа администратора (sudo) к серверу сборки. Преимущество использования родного установщика заключается в том, что он устанавливает все родные зависимости, необходимые для работы инструментария. Кроме того, собственные установщики обеспечивают системную установку пакета SDK.

Пользователи macOS должны использовать установщики PKG. В Linux можно выбрать использование менеджера пакетов с поддержкой репозиториев, например apt-get для Ubuntu или yum для CentOS Stream, или использовать пакеты напрямую, такие как DEB или RPM. Для платформ Windows можно использовать установщик MSI.

Последние стабильные двоичные файлы можно найти на .NET downloads. Если вы хотите использовать последние (и потенциально неустойчивые) средства предварительного выпуска, используйте ссылки, предоставленные в репозитории dotnet/installer GitHub. Для дистрибутивов Linux доступны для загрузки архивы tar.gz (также известные как tarballs), используйте скрипты установки в этих архивах для установки .NET.

Скрипт установщика

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

Работу скрипта установки можно автоматизировать в начале процесса сборки. Это позволяет получить и установить требуемую версию пакета SDK. Требуемая версия — это версия пакета SDK, необходимая в проектах для сборки. Этот скрипт позволяет установить SDK в локальном каталоге на сервере, запустить средства с установленного места, а затем выполнить очистку после завершения сборки (очистку также может выполнить служба непрерывной интеграции). Это обеспечивает инкапсуляцию и изоляцию процесса сборки. Ссылку на скрипт установки можно найти в статье о dotnet-install.

Примечание.

Azure DevOps Services

При использовании скрипта установки собственные зависимости не устанавливаются автоматически. Вы должны установить родные зависимости, если их нет в операционной системе. Дополнительные сведения см. в разделе "Установка .NET" в Windows, Linux и macOS.

Примеры настройки CI

В этом разделе описывается ручная настройка с помощью скрипта PowerShell или bash, а также описания решений CI как службы (SaaS). Рассматриваемые решения SaaS CI включают Travis CI, AppVeyor и Azure Pipelines. Сведения о действиях GitHub см. в разделе GitHub Actions и .NET.

Ручная настройка

Каждая служба SaaS имеет свои методы для создания и настройки процесса сборки. Если вы используете другое решение SaaS, отличное от перечисленных или требующих настройки за пределами предварительно упаковаемой поддержки, необходимо выполнить по крайней мере некоторую настройку вручную.

Как правило, в процессе ручной настройки необходимо получить версию средств (или последнюю ночную сборку) и выполнить скрипт сборки. Вы можете использовать скрипт PowerShell или bash, чтобы настроить команды .NET, а также файл проекта, который определяет процесс сборки. Подробные сведения об этих параметрах см. в разделе Секция оркестрации.

После создания сценария, выполняющего ручную настройку сервера сборки CI, используйте его на своей локальной машине разработки, чтобы локально собрать код для тестирования. Как только вы убедитесь, что скрипт хорошо работает локально, разверните его на сервере сборки CI. Ниже приведен относительно простой сценарий PowerShell, позволяющий получить пакет SDK для .NET и установить его на сервере сборки Windows:

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

$ErrorActionPreference="Stop"
$ProgressPreference="SilentlyContinue"

# $LocalDotnet is the path to the locally-installed SDK to ensure the
#   correct version of the tools are executed.
$LocalDotnet=""
# $InstallDir and $CliVersion variables can come from options to the
#   script.
$InstallDir = "./cli-tools"
$CliVersion = "6.0.7"

# Test the path provided by $InstallDir to confirm it exists. If it
#   does, it's removed. This is not strictly required, but it's a
#   good way to reset the environment.
if (Test-Path $InstallDir)
{
    rm -Recurse $InstallDir
}
New-Item -Type "directory" -Path $InstallDir

Write-Host "Downloading the CLI installer..."

# Use the Invoke-WebRequest PowerShell cmdlet to obtain the
#   installation script and save it into the installation directory.
Invoke-WebRequest `
    -Uri "https://dot.net/v1/dotnet-install.ps1" `
    -OutFile "$InstallDir/dotnet-install.ps1"

Write-Host "Installing the CLI requested version ($CliVersion) ..."

# Install the SDK of the version specified in $CliVersion into the
#   specified location ($InstallDir).
& $InstallDir/dotnet-install.ps1 -Version $CliVersion `
    -InstallDir $InstallDir

Write-Host "Downloading and installation of the SDK is complete."

# $LocalDotnet holds the path to dotnet.exe for future use by the
#   script.
$LocalDotnet = "$InstallDir/dotnet"

# Run the build process now. Implement your build script here.

Трэвис CI

Средство Travis CI можно настроить, чтобы установить пакет SDK для .NET с помощью языка csharp и ключа dotnet. Дополнительные сведения см. в официальной документации Travis CI по созданию проектов C#, F# или Visual Basic. Обратите внимание, что при доступе к сведениям сообщества Travis CI идентификатор языка language: csharp работает для всех языков .NET, в том числе F# и Mono.

Travis CI выполняет задания для macOS и Linux в матрице сборки, где вы указываете сочетание среды выполнения, окружения, а также исключений и включений, чтобы охватить все комбинации сборок для вашего приложения. Для получения дополнительной информации см. статью Настройка сборки в документации Travis CI. Инструменты, интегрированные с MSBuild, включают в себя среды выполнения с долгосрочной поддержкой (LTS) и стандартной поддержкой (STS) в пакете. Таким образом, установив пакет SDK, вы получите все необходимое для сборки.

AppVeyor

AppVeyor устанавливает SDK для .NET 6 с помощью образа сборки Visual Studio 2022 . Доступны и другие образы сборки с разными версиями пакета SDK для .NET. Для получения дополнительной информации см. статью «Build worker images» в документации AppVeyor.

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

environment:
  matrix:
    - CLI_VERSION: 6.0.7
    - CLI_VERSION: Latest

Azure DevOps Services

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

  • Выполнение скрипта из раздела Ручная настройка с использованием собственных команд.
  • Создание сборки, состоящей из нескольких встроенных задач сборки Azure DevOps Services, которые используют средства .NET.

Оба решения допустимые. С помощью скрипта настройки вручную вы можете контролировать версии инструментов, которые получаете в процессе их загрузки как часть сборки. Сборка выполняется с помощью скрипта, который вам необходимо создать. В этой статье рассматривается только ручная опция. Дополнительные сведения о создании сборки с помощью задач сборки Azure DevOps Services см. в документации по Azure Pipelines.

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

  1. Сначала создайте определение сборки. Когда появится окно определения типа создаваемой сборки, выберите параметр Пусто.

    Выбор пустого определения сборки

  2. После настройки репозитория для сборки вы будете направлены к определениям сборок. Выберите Добавить шаг сборки:

    Добавление шага сборки

  3. После этого откроется каталог задач. Каталог содержит задачи, которые используете в сборке. Так как у вас есть скрипт, нажмите кнопку Добавить рядом с параметром PowerShell: Запуск скрипта PowerShell.

    Добавление этапа сценария PowerShell

  4. Настройте этап сборки. Добавьте скрипт из репозитория, который вы строите.

    Указание выполняемого сценария PowerShell

Оркестрация сборки

В большинстве этого документа описывается, как получить средства .NET и настроить различные службы CI без предоставления сведений о том, как оркестровать или фактически создавать код с помощью .NET. Способ структурирования процесса сборки зависит от многих факторов, которые нельзя здесь описать в общем виде. Дополнительные сведения об оркестрации сборок с использованием каждой технологии, а также ресурсы и примеры вы можете найти в документации по Travis CI, AppVeyor и Azure Pipelines.

Два принципиальных подхода структурирования процесса сборки кода .NET с использованием средств .NET заключаются в использовании MSBuild напрямую или с помощью программ командной строки .NET. Ваш выбор подхода должен зависеть от вашего уровня комфортности с этими подходами и компромиссами в сложности. MSBuild предоставляет возможность представить процесс сборки в виде задач и целевых объектов, но сложность этого подхода заключается в необходимости изучения синтаксиса файла проекта MSBuild. Использование инструментов командной строки .NET, возможно, проще, однако это требует написания логики оркестрации на языке скриптов, например bash или PowerShell.

Совет

Одно из свойств MSBuild, которое вы, вероятно, захотите настроить, — это trueContinuousIntegrationBuild. Это свойство включает параметры, которые применяются только к официальным сборкам, а не к локальным сборкам разработки.

См. также