Публикация пакетов NuGet с помощью Azure Pipelines (YAML/классическая модель)
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
В Azure Pipelines можно использовать классический редактор или задачи YAML для публикации пакетов NuGet в конвейере, веб-канала Артефактов Azure или общедоступных реестров, таких как nuget.org.
Создание пакета NuGet
Существуют различные способы создания пакетов NuGet, таких как использование Visual Studio для упаковки пакетов NuGet. Если вы уже используете MSBuild или какую-либо другую задачу для создания пакетов, пропустите этот раздел и перейдите к разделу публикации пакетов NuGet.
Чтобы создать пакет NuGet, добавьте следующий фрагмент кода в файл YAML конвейера. Дополнительные сведения см. в статье "Задача NuGet".
- task: NuGetCommand@2
inputs:
command: pack
packagesToPack: '**/*.csproj'
packDestination: '$(Build.ArtifactStagingDirectory)'
- packagesToPack: шаблон для поиска каталогов csproj для упаковки
- packDestination: каталог, в котором создаются пакеты
Управление версиями пакета
Пакеты NuGet отличаются именами и номерами версий. Использование семантического управления версиями — это рекомендуемая стратегия эффективного управления версиями пакетов. Семантические версии состоят из трех числовых компонентов: "Основной", "Дополнительный" и "Исправление".
Исправление увеличивается после исправления ошибки. При выпуске новой функции, совместимой с обратной совместимостью, вы добавите дополнительную версию и сбросите версию исправления до 0. При внесении изменения, несовместимого с обратной совместимостью, вы добавите основную версию и сбросите версии дополнительных и исправлений до 0.
С помощью семантического управления версиями можно также использовать метки предварительной версии для тегов пакетов. Для этого введите дефис, за которым следует тег предварительной версии: например, 1.0.0-beta. Семантическая версия поддерживается в 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)'
Публикация пакетов NuGet
Чтобы опубликовать пакеты в веб-канале Azure Artifacts из конвейера, удостоверение конвейера должно иметь роль издателя веб-канала (участника). Дополнительные сведения см. в разделе "Разрешения конвейеров".
steps:
- task: NuGetAuthenticate@1
displayName: 'NuGet Authenticate'
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
publishVstsFeed: '<projectName>/<feed>'
allowPackageConflicts: true
Чтобы опубликовать пакет во внешнем веб-канале NuGet, необходимо сначала создать подключение службы для подключения к нему. Чтобы создать подключение к службе, выполните приведенные действия.
- Перейдите в раздел "Параметры>службы" подключения>службы "Создать подключение службы".
- Выберите NuGet и нажмите кнопку "Далее".
- Заполните форму и нажмите кнопку "Сохранить " после завершения.
Дополнительные сведения см. в разделе "Управление подключениями к службе".
Примечание.
Задача NuGetAuthenticate@1 поддерживает подключение к службе с помощью базовой проверки подлинности. Задача не поддерживает проверку подлинности ключа API NuGet. Если подключение службы использует ApiKey, необходимо использовать задачу NuGetCommand@2 и указать ключ API NuGet в поле аргументов. Дополнительные сведения см. в статье "Задача NuGet".
Чтобы опубликовать пакет во внешнем веб-канале NuGet, добавьте следующий фрагмент кода в конвейер YAML.
Использование задачи команднойстроки (с NuGet.exe):
- task: NuGetAuthenticate@1
inputs:
nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>
- script: |
nuget push <PACKAGE_PATH> -src https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json -ApiKey <ANY_STRING>
displayName: "Push"
Использование задачи команднойстроки (с dotnet):
- task: NuGetAuthenticate@1
inputs:
nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>
- script: |
dotnet build <CSPROJ_PATH> --configuration <CONFIGURATION>
dotnet pack <CSPROJ_PATH> -p:PackageVersion=<YOUR_PACKAGE_VERSION> --output <OUTPUT_DIRECTORY> --configuration <CONFIGURATION>
dotnet nuget push <PACKAGE_PATH> --source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --api-key <ANY_STRING>
displayName: "Build, pack and push"
Примечание.
Это ApiKey
необходимо, но при отправке в веб-каналы Артефактов Azure можно использовать любое произвольное значение.
Публикация на NuGet.org
Создайте ключ API.
Перейдите к проекту Azure DevOps и выберите параметры проекта.
Выберите службы Подключение ions и выберите "Создать подключение службы".
Выберите NuGet и нажмите кнопку "Далее".
Выберите ApiKey в качестве метода проверки подлинности. Используйте следующий URL-адрес для URL-адреса веб-канала: https://api.nuget.org/v3/index.json
Введите apiKey, созданное ранее, и введите имя подключения службы.
Выберите "Предоставить разрешение на доступ ко всем конвейерам", а затем нажмите кнопку "Сохранить " после завершения. Чтобы выбрать этот параметр, требуется роль подключения службы Администратор istrator.
Добавьте следующий фрагмент кода YAML в определение конвейера:
steps:
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
nuGetFeedType: external
publishFeedCredentials: nuget.org
Связанные статьи
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по