Публикация пакетов NuGet из командной строки (dotnet)

Сервисы Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

В этом руководстве описывается настройка проекта для публикации пакетов NuGet с помощью интерфейса командной строки dotnet.

Необходимые условия

продукт Требования
Azure DevOps — Организация в Azure DevOps.
— проект Azure DevOps .
— канал Azure Artifacts.
— Скачайте и установите пакет SDK .NET версии 9.0.200 или более поздней версии.

Настройка поставщика учетных данных Azure Artifacts

Чтобы выполнить аутентификацию в вашем канале, необходимо сначала установить поставщик учетных данных Azure Artifacts. С помощью установщика инструментов, включенного в dotnet, можно установить поставщик учетных данных из интерфейса командной строки с помощью следующей команды:

dotnet tool install --global Microsoft.Artifacts.CredentialProvider.NuGet.Tool

Если на уровне репозитория nuget.config настроено использование только Azure Artifacts источников, выполните команду установки за пределами этого каталога или явно задайте nuget.org в качестве источника:

dotnet tool install --global Microsoft.Artifacts.CredentialProvider.NuGet.Tool --source https://api.nuget.org/v3/index.json

При необходимости закрепите инструмент на основной версии (например, в образах контейнеров, где важна воспроизводимость):

dotnet tool install --global Microsoft.Artifacts.CredentialProvider.NuGet.Tool --version 2.* --source https://api.nuget.org/v3/index.json

Первое использование

При первом выполнении операции, требующей проверки подлинности, используйте один из следующих подходов:

  1. Выполните команду с --interactive, чтобы dotnet мог предложить вам войти в систему. Это рекомендуемый подход для большинства локальных сценариев разработки.

Перед выполнением интерактивной команды убедитесь, что проект настроен и веб-канал добавляется в nuget.config. Сведения о настройке см. в разделе "Настройка проекта".

После настройки и подключения проекта к веб-каналу перейдите в каталог проекта и выполните следующую команду:

dotnet restore --interactive

Эта команда выполняет вход в систему и получает токен сеанса. После успешного входа вы можете выполнять команды, требующие проверки подлинности, без --interactive, пока кэшированный токен сеанса остаётся действительным. Дополнительные сведения см. в разделе Расположение кэша токенов сеанса.

  1. Для неинтерактивных сценариев, таких как контейнеры Docker и настраиваемая автоматизация, предоставьте учетные данные с помощью переменных environment.

Для Azure Pipelines используйте задачу NuGetAuthenticate@1 для аутентификации в вашем канале перед выполнением таких команд, как dotnet restore или dotnet nuget push. Дополнительные сведения см. в статье Восстановление пакетов NuGet с помощью Azure Pipelines.

Создайте ленту

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

  1. Войдите в Azure DevOps и перейдите к проекту.

  2. Выберите Артефакты, затем выберите Создать фид.

  3. Введите описательное имя веб-канала и определите его видимость (кто может использовать веб-канал). Укажите область веб-канала и, если вы хотите включить пакеты из общедоступных источников, установите флажок "Включить пакеты из общих общедоступных источников ".

  4. После завершения работы выберите Создать.

Подключение к ленте

Прежде чем публиковать пакеты в канал поставки, необходимо аутентифицироваться в Azure Artifacts. Следуйте приведённым ниже инструкциям, чтобы настроить проект и авторизоваться через канал.

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

  2. Выберите артефакты, а затем выберите канал в раскрывающемся меню.

  3. Выберите Подключиться к каналу, а затем выберите dotnet в разделе NuGet слева.

  4. Создайте файл nuget.config в той же папке, что и файл csproj или sln. Скопируйте следующий фрагмент XML-кода и вставьте его в новый файл, заменив заполнители соответствующими сведениями:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="<FEED_NAME>" value="https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" />
  </packageSources>
</configuration>
  1. Войдите на сервер Azure DevOps и перейдите к проекту.

  2. Выберите артефакты, а затем выберите вашу ленту.

  3. Выберите Подключиться к каналу, а затем выберите dotnet в левой панели навигации.

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

    Снимок экрана, показывающий, как подключиться к фиду с dotnet в Azure DevOps Server 2020 и 2022.

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

Выполните следующую команду, чтобы опубликовать пакет в веб-канале. Замените заполнители соответствующими значениями:

dotnet nuget push --source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --api-key <ANY_STRING> <PACKAGE_PATH> 

пример:

dotnet nuget push --source https://pkgs.dev.azure.com/MyOrg/MyProject/_packaging/MyFeed/nuget/v3/index.json --api-key AZ bin/MyPackage.5.0.2.nupkg

Заметка

Параметр api-key требуется при публикации в фид Azure Artifacts, но в качестве значения можно использовать любую строку.

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

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

  1. Перейдите в организацию, в которой размещён целевой фид, и создайте персональный маркер доступа (PAT) с областью Packaging>Read & write.

  2. Замените заполнитель <PERSONAL_ACCESS_TOKEN> личным маркером доступа, а затем выполните следующую команду, чтобы добавить источник пакета в файл nuget.config. Убедитесь, что этот файл хранится безопасно и не проверяется в системе управления версиями.

    dotnet nuget add source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --name <SOURCE_NAME> --username <USER_NAME> --password <PERSONAL_ACCESS_TOKEN> --configfile <PATH_TO_NUGET_CONFIG_FILE>
    
  3. Выполните следующую команду, чтобы опубликовать пакет:

    dotnet nuget push --source <SOURCE_NAME> --api-key <ANY_STRING> <PACKAGE_PATH>
    

пример:

dotnet nuget add source https://pkgs.dev.azure.com/MyOrg/MyProject/_packaging/MyFeed/nuget/v3/index.json --name MySource --username MyUserName --password MyPersonalAccessToken --configfile ./nuget.config

dotnet nuget push --source MySource --api-key AZ nupkgs/mypackage.1.1.0.nupkg

Заметка

Если в вашей организации используется брандмауэр или прокси-сервер, убедитесь, что URL-адреса и IP-адреса домена Azure Artifacts разрешены .