Публикация пакетов NuGet с помощью Azure Pipelines (YAML/классическая модель)
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
С помощью Azure Pipelines можно публиковать пакеты NuGet в веб-каналах Артефактов Azure в организации, в других организациях и в общедоступных реестрах, таких как nuget.org, с помощью классических или конвейеров YAML. В этой статье вы узнаете, как выполнять следующие задачи.
- Публикация пакетов во внутреннем веб-канале
- Публикация пакетов в веб-канале другой организации
- Управление версиями пакета
Необходимые компоненты
Создайте организацию Azure DevOps и проект, если вы еще не сделали этого.
Создайте веб-канал, если у вас еще нет.
Если вы используете автономный агент, убедитесь, что он имеет пакет SDK для .NET Core (2.1.400+) и NuGet (4.8.0.5385+).
Публикация пакетов NuGet в веб-канале в той же организации
Примечание.
Чтобы опубликовать пакеты в веб-канале с помощью Azure Pipelines, убедитесь, что в параметрах веб-канала назначена роль издателя веб-канала (участника) и службы сборки проекта. Дополнительные сведения см. в статье "Управление разрешениями ".
Войдите в организацию Azure DevOps и перейдите к проекту.
Выберите конвейеры и выберите определение конвейера.
Нажмите кнопку "Изменить", а затем добавьте следующий фрагмент кода в конвейер YAML.
steps:
- task: NuGetToolInstaller@1 # Minimum required NuGet version: 4.8.0.5385+.
displayName: 'NuGet Tool Installer'
- task: NuGetAuthenticate@0
displayName: 'NuGet Authenticate'
- script: |
nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
displayName: Push
Войдите в организацию Azure DevOps и перейдите к проекту.
Выберите конвейеры и выберите определение конвейера.
Нажмите кнопку "Изменить", а затем добавьте следующий фрагмент кода в конвейер YAML.
steps:
- task: NuGetToolInstaller@1 # Minimum required NuGet version: 4.8.0.5385+.
displayName: 'NuGet Tool Installer'
- task: NuGetAuthenticate@1
displayName: 'NuGet Authenticate'
- script: |
nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
displayName: Push
Публикация пакетов NuGet в веб-канале в другой организации
Чтобы опубликовать пакеты NuGet в веб-канале в другой организации Azure DevOps, необходимо сначала создать личный маркер доступа (PAT) в целевой организации. Перейдите к организации, в которой размещен целевой веб-канал, и создайте личный маркер доступа с помощью области упаковки>чтения и записи. После создания PAT скопируйте и сохраните его в безопасном расположении, так как вам потребуется в следующем разделе, чтобы настроить подключение к службе.
Войдите в организацию Azure DevOps, в которой будет выполняться конвейер, а затем перейдите к проекту.
Перейдите к подключениям> службы параметров проекта.
Выберите новое подключение к службе, выберите NuGet и нажмите кнопку "Далее".
Выберите внешний сервер Azure DevOps в качестве метода проверки подлинности и введите URL-адрес целевого веб-канала. Вставьте созданный ранее личный маркер доступа, укажите имя подключения к службе и проверьте разрешение на доступ ко всем конвейерам, если применимо к вашему сценарию.
Выберите Сохранить, когда вы закончите.
Войдите в организацию Azure DevOps и перейдите к проекту.
Выберите конвейеры и выберите определение конвейера.
Нажмите кнопку "Изменить", а затем добавьте следующий фрагмент кода в конвейер YAML.
- task: NuGetToolInstaller@1 # Minimum required NuGet version: 4.8.0.5385+. displayName: 'NuGet Tool Installer' - task: NuGetAuthenticate@1 inputs: nuGetServiceConnections: <SERVICE_CONNECTION_NAME> - script: | nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg displayName: Push
Войдите в организацию Azure DevOps и перейдите к проекту.
Выберите конвейеры и выберите определение конвейера.
Нажмите кнопку "Изменить", а затем добавьте следующий фрагмент кода в конвейер YAML.
- task: NuGetToolInstaller@1 # Minimum required NuGet version: 4.8.0.5385+. displayName: 'NuGet Tool Installer' - task: NuGetAuthenticate@0 inputs: nuGetServiceConnections: <SERVICE_CONNECTION_NAME> - script: | nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg displayName: Push
Управление версиями пакетов задач NuGet
Azure Pipelines поддерживает семантику управления версиями и предоставляет следующие параметры конфигурации для задач NuGet:
Использование даты и времени (классическая модель) | byPrereleaseNumber (YAML): версия пакета будет соответствовать формату: Major.Minor.Patch-ci-datetime , где можно настроить значения основного, дополнительного и исправления.
Использование переменной среды (классическая модель) | byEnvVar (YAML): версия пакета имеет значение указанной переменной среды.
Использование номера сборки (классическая модель) | byBuildNumber (YAML): для версии пакета задан номер сборки. Убедитесь, что в параметрах
$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
конвейера определен формат номера сборки. Чтобы указать формат в YAML, добавьтеname:
свойство в корне конвейера и определите формат.
Ниже приведен пример, демонстрирующий использование версии даты и времени для создания пакета, соответствующего SemVer, форматированного как Major.Minor.Patch-ci-datetime.
variables:
Major: '1'
Minor: '0'
Patch: '0'
steps:
- task: NuGetCommand@2
inputs:
command: pack
versioningScheme: byPrereleaseNumber
majorVersion: '$(Major)'
minorVersion: '$(Minor)'
patchVersion: '$(Patch)'
Примечание.
DotNetCore
и DotNetStandard
пакеты следует упаковать с задачей DotNetCoreCLI@2
, чтобы избежать System.InvalidCastExceptions. Дополнительные сведения см. в задаче .NET Core CLI .
task: DotNetCoreCLI@2
inputs:
command: pack
versioningScheme: byPrereleaseNumber
majorVersion: '$(Major)'
minorVersion: '$(Minor)'
patchVersion: '$(Patch)'