Использование пакета SDK для .NET в средах непрерывной интеграции (CI)
В этой статье описывается, как использовать пакет SDK для .NET и его средства на сервере сборки. Набор инструментов .NET работает в интерактивном режиме, где команды разработчика выполняются в командной строке и автоматически, где сервер непрерывной интеграции (CI) выполняет скрипт сборки. Команды, параметры, входные и выходные данные совпадают. В этом случае нужно только указать способ получения средств и систему сборки приложения. В этой статье рассматриваются сценарии приобретения средств для CI с рекомендациями по проектированию и структуре скриптов сборки.
Варианты установки для серверов сборки CI
Если вы используете GitHub, установка выполняется просто. Вы можете использовать GitHub Actions для установки пакета SDK для .NET в рабочем процессе. Рекомендуемый способ установки пакета SDK для .NET в рабочем процессе — это actions/setup-net-core-sdk
действие. Дополнительные сведения см. в действии пакета SDK для .NET Core в GitHub Marketplace. Примеры работы см . в кратком руководстве по созданию рабочего процесса проверки сборки GitHub.
Собственные установщики
В macOS, Linux и Windows доступны собственные установщики. Установщики требуют доступа администратора (sudo) к серверу сборки. Преимущество использования собственного установщика заключается в том, что он устанавливает собственные зависимости, необходимые для выполнения средства. Кроме того, собственные установщики обеспечивают системную установку пакета SDK.
Пользователи macOS должны использовать установщики PKG. В Linux можно использовать диспетчер пакетов на основе веб-каналов, например apt-get для Ubuntu или yum для CentOS Stream, или использовать сами пакеты, DEB или RPM. Для платформ Windows можно использовать установщик MSI.
Последние надежные двоичные файлы можно найти на странице скачиваемых файлов .NET. Если вы хотите использовать последние (и потенциально неустойчивые) средства предварительного выпуска, используйте ссылки, предоставленные в репозитории dotnet/installer GitHub. Для дистрибутивов tar.gz
Linux архивы (также известные как tarballs
) доступны; используйте скрипты установки в архивах для установки .NET.
Скрипт установщика
Скрипт установки позволяет выполнять установку на сервере сборки без прав администратора. Кроме того, с его помощью очень легко обеспечить автоматизацию. Скрипт самостоятельно скачивает средство и распаковывает его в стандартную или указанную папку. Вы также можете указать версию средства, которую следует установить, а также нужно ли установить пакет SDK целиком или только общую среду выполнения.
Работу скрипта установки можно автоматизировать в начале процесса сборки. Это позволяет получить и установить требуемую версию пакета SDK. Требуемая версия — это версия пакета SDK, необходимая в проектах для сборки. Этот скрипт позволяет установить пакет SDK в локальном каталоге на сервере, запустить средства из папки установки, а затем выполнить очистку после завершения сборки (очистку также может выполнить сервер непрерывной интеграции). Это обеспечивает инкапсуляцию и изоляцию процесса сборки. Ссылку на скрипт установки можно найти в статье о dotnet-install.
Примечание.
Azure DevOps Services
При использовании скрипта установки собственные зависимости не устанавливаются автоматически. Их необходимо установить вручную, если их нет в операционной системе. Дополнительные сведения см. в разделе "Установка .NET" в Windows, Linux и macOS.
Примеры установки решений CI
В этом разделе описывается ручная настройка с помощью скрипта PowerShell или bash, а также описания решений CI как службы (SaaS). таких как 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.
Travis 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. Дополнительные сведения см. в статье "Сборка рабочих образов " в документации 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:
Сначала создайте определение сборки. Когда появится окно определения типа создаваемой сборки, выберите параметр Пусто.
После настройки репозитория сборки откроется окно "Определения сборок". Выберите Добавить шаг сборки:
После этого откроется каталог задач. В нем содержатся задачи, используемые в сборке. Так как у вас есть скрипт, нажмите кнопку Добавить рядом с параметром PowerShell: Запуск скрипта PowerShell.
Настройте сервер сборки. Добавьте скрипт из репозитория, для которого выполняется сборка:
Оркестрация сборки
В большинстве этого документа описывается, как получить средства .NET и настроить различные службы CI без предоставления сведений о том, как оркестровать или фактически создавать код с помощью .NET. Способ структурирования процесса сборки зависит от многих факторов, которые нельзя здесь описать в общем виде. Дополнительные сведения об оркестрации сборок на основе каждой упомянутой в этой статье технологии, а также ресурсы и примеры см. в документации по Travis CI, AppVeyor и Azure Pipelines.
Два принципиальных подхода структурирования процесса сборки кода .NET с использованием средств .NET заключаются в использовании MSBuild напрямую или с помощью программ командной строки .NET. Выберите подход, который проще и удобнее для вас. MSBuild предоставляет возможность представить процесс сборки в виде задач и целевых объектов, но сложность этого подхода заключается в необходимости изучения синтаксиса файла проекта MSBuild. Подход с использованием программ командной строки .NET, возможно, проще, но в этом случае следует написать логику оркестрации на языке написания скриптов, например bash
или PowerShell.
Совет
Одно свойство MSBuild, для которого требуется задать значение true
ContinuousIntegrationBuild
. Это свойство включает параметры, которые применяются только к официальным сборкам, а не к локальным сборкам разработки.