Публикация пакетов NuGet с помощью Azure Pipelines (YAML/классическая модель)
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
С помощью Azure Pipelines можно использовать классические или YAML-конвейеры для публикации пакетов NuGet в веб-канале Azure Artifacts, внешних веб-каналах или общедоступных реестрах, таких как nuget.org. В этой статье вы узнаете, как:
- Создание пакета NuGet в Azure Pipelines
- Публикация пакетов во внутренних и внешних веб-каналах
- Публикация пакетов в NuGet.org
Необходимые компоненты
Организация Azure DevOps. Создайте ее бесплатно.
Проект Azure DevOps. Создайте проект , если у вас еще нет этого проекта .
Веб-канал артефактов Azure. Создайте ее бесплатно.
Создание пакета NuGet
Существует несколько способов создания пакетов NuGet, таких как использование dotnet или nuget.exe CLI для упаковки пакетов. Если вы уже используете MSBuild или другие задачи для создания пакетов, вы можете пропустить этот раздел и перейти к следующему.
Чтобы создать пакет 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)'
Публикация пакетов во внутренних веб-каналах
Примечание.
Чтобы опубликовать пакеты в веб-канале с помощью Azure Pipelines, убедитесь, что в параметрах веб-канала назначена роль издателя веб-канала (участника) и службы сборки проекта. Дополнительные сведения см. в статье "Управление разрешениями ".
steps:
- task: NuGetAuthenticate@1
displayName: 'NuGet Authenticate'
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
publishVstsFeed: '<projectName>/<feed>'
allowPackageConflicts: true
Публикация пакетов во внешних веб-каналах
Чтобы опубликовать пакеты во внешних веб-каналах NuGet или общедоступных реестрах, таких как веб-каналы в других организациях Azure DevOps или nuget.org, необходимо сначала создать подключение к службе для проверки подлинности в соответствующей службе:
В проекте Azure DevOps перейдите к подключениям >службы параметров проекта>
Нажмите кнопку "Создать подключение к>службе" NuGet>Далее.
Заполните обязательные поля и нажмите кнопку "Сохранить " после завершения. Дополнительные сведения см. в статье "Управление подключениями к службе".
Примечание.
Задача NuGetAuthenticate@1 поддерживает подключения служб с базовой проверкой подлинности, но не поддерживает проверку подлинности Apikey. Чтобы использовать проверку подлинности ApiKey, вместо этого необходимо использовать задачу NuGetCommand@2.
Чтобы опубликовать пакеты 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
Войдите в учетную запись nuget.org и создайте ключ API.
Перейдите к проекту Azure DevOps и выберите параметры проекта.
Выберите службы Подключение ions и выберите "Создать подключение службы".
Выберите NuGet и нажмите кнопку "Далее".
Выберите ApiKey в качестве метода проверки подлинности и используйте следующий URL-адрес для URL-адреса веб-канала: https://api.nuget.org/v3/index.json
Введите apiKey, созданное ранее, а затем укажите имя подключения службы.
Выберите "Предоставить разрешение на доступ ко всем конвейерам", а затем нажмите кнопку "Сохранить " после завершения. Обратите внимание, что для выбора этого параметра требуется роль подключения службы Администратор istrator.
steps:
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
nuGetFeedType: external
publishFeedCredentials: nuget.org
Связанные статьи
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по