Публикация пакетов NuGet с помощью Azure Pipelines (YAML/классическая модель)

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

С помощью Azure Pipelines можно публиковать пакеты NuGet в веб-каналах Артефактов Azure в организации, в других организациях и в общедоступных реестрах, таких как nuget.org, с помощью классических или конвейеров YAML. В этой статье вы узнаете, как выполнять следующие задачи.

  • Публикация пакетов во внутреннем веб-канале
  • Публикация пакетов в веб-канале другой организации
  • Управление версиями пакета

Необходимые компоненты

Публикация пакетов NuGet в веб-канале в той же организации

Примечание.

Чтобы опубликовать пакеты в веб-канале с помощью Azure Pipelines, убедитесь, что в параметрах веб-канала назначена роль издателя веб-канала (участника) и службы сборки проекта. Дополнительные сведения см. в статье "Управление разрешениями ".

  1. Войдите в организацию Azure DevOps и перейдите к проекту.

  2. Выберите конвейеры и выберите определение конвейера.

  3. Нажмите кнопку "Изменить", а затем добавьте следующий фрагмент кода в конвейер 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
  1. Войдите в организацию Azure DevOps и перейдите к проекту.

  2. Выберите конвейеры и выберите определение конвейера.

  3. Нажмите кнопку "Изменить", а затем добавьте следующий фрагмент кода в конвейер 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 скопируйте и сохраните его в безопасном расположении, так как вам потребуется в следующем разделе, чтобы настроить подключение к службе.

  1. Войдите в организацию Azure DevOps, в которой будет выполняться конвейер, а затем перейдите к проекту.

  2. Перейдите к подключениям> службы параметров проекта.

  3. Выберите новое подключение к службе, выберите NuGet и нажмите кнопку "Далее".

  4. Выберите внешний сервер Azure DevOps в качестве метода проверки подлинности и введите URL-адрес целевого веб-канала. Вставьте созданный ранее личный маркер доступа, укажите имя подключения к службе и проверьте разрешение на доступ ко всем конвейерам, если применимо к вашему сценарию.

  5. Выберите Сохранить, когда вы закончите.

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

  1. Войдите в организацию Azure DevOps и перейдите к проекту.

  2. Выберите конвейеры и выберите определение конвейера.

  3. Нажмите кнопку "Изменить", а затем добавьте следующий фрагмент кода в конвейер 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       
    
  1. Войдите в организацию Azure DevOps и перейдите к проекту.

  2. Выберите конвейеры и выберите определение конвейера.

  3. Нажмите кнопку "Изменить", а затем добавьте следующий фрагмент кода в конвейер 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)'