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

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

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

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

Продукт Требования
Azure DevOps организация Azure DevOps и проект.
— канал Azure Artifacts .
— Если вы используете автономный агент, убедитесь, что у него установлен пакет SDK для .NET Core и NuGet .
- Разрешения:
    — Чтобы предоставить доступ ко всем конвейерам в проекте, необходимо быть членом группы администраторов проектов.
    — Для создания подключений к службе необходимо иметь роль администратора или создателя для подключений служб .

Примечание.

Если вы используете Ubuntu 24.04 или более поздней версии, необходимо использовать NuGetAuthenticate задачу с .NET CLI вместо nuget.exe. Дополнительные сведения см. в поддержке новых размещённых образов Ubuntu.

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

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

  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                            # Authenticate with Azure Artifacts and other NuGet registries.
      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
    

Примечание.

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

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

Чтобы опубликовать пакеты NuGet в канале другой организации Azure DevOps, сначала необходимо создать личный маркер доступа (PAT) в целевой организации, а затем создать подключение к службе в организации, где выполняется ваш конвейер. Затем вы можете использовать подключение службы в конвейере YAML или в классическом конвейере для аутентификации и публикации пакетов.

1. Создание личного токена доступа

  1. Войдите в организацию Azure DevOps, в которой размещен ваш целевой фид.

  2. Перейдите в настройки пользователя>персональные токены доступа.

  3. Выберите Новый токен, укажите описательное имя, а затем в разделе Области выберите Упаковка>Чтение и запись.

  4. Нажмите кнопку "Создать", а затем скопируйте и сохраните PAT в безопасном месте, так как вам потребуется настроить подключение к сервису далее.

2. Создание подключения к службе

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

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

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

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

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

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

3. Публикация пакета

  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@1                            # Authenticate with Azure Artifacts and other NuGet registries.
      inputs:
        nuGetServiceConnections: <SERVICE_CONNECTION_NAME>        # Name of the service connection used to authenticate with feeds across organizations or public registries.
    
    - 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          
    

Снимок экрана: успешно опубликованный пакет в веб-канале другой организации.