NuGetAuthenticate@1 — задача проверки подлинности NuGet версии 1

Настройте средства NuGet для проверки подлинности в Azure Artifacts и других репозиториях NuGet. Требуется NuGet >= 4.8.5385, dotnet >= 6 или MSBuild >= 15.8.166.59604.

Синтаксис

# NuGet authenticate v1
# Configure NuGet tools to authenticate with Azure Artifacts and other NuGet repositories. Requires NuGet >= 4.8.5385, dotnet >= 6, or MSBuild >= 15.8.166.59604.
- task: NuGetAuthenticate@1
  inputs:
    #nuGetServiceConnections: # string. Service connection credentials for feeds outside this organization. 
    #forceReinstallCredentialProvider: false # boolean. Reinstall the credential provider even if already installed. Default: false.

Входные данные

nuGetServiceConnections - Учетные данные подключения службы для веб-каналов за пределами этой организации
string.

Необязательный элемент. Разделенный запятыми список имен подключений к службам NuGet для веб-каналов за пределами этой организации или коллекции. Для веб-каналов в этой организации или коллекции оставьте это поле пустым; учетные данные сборки используются автоматически.


forceReinstallCredentialProvider - Переустановите поставщик учетных данных, даже если он уже установлен
boolean. Значение по умолчанию: false.

Необязательный элемент. Переустановка поставщика учетных данных в каталог профилей пользователей, даже если он уже установлен. Если поставщик учетных данных уже установлен в профиле пользователя, задача определяет, перезаписывается ли он поставщиком учетных данных, предоставленным задачей. Это может обновить (или потенциально понизить) поставщик учетных данных.


Параметры управления задачами

Все задачи имеют параметры управления в дополнение к входным данным задачи. Дополнительные сведения см. в разделе Параметры управления и общие свойства задачи.

Выходные переменные

Нет.

Remarks

Важно!

Эта задача совместима только с NuGet >= 4.8.0.5385, dotnet >= 6 или MSBuild >= 15.8.166.59604.

Какие средства совместимы с этой задачей?

Эта задача настраивает средства, поддерживающие кроссплатформенные подключаемые модули NuGet. В настоящее время средства включают nuget.exe, dotnet и последние версии MSBuild со встроенной поддержкой восстановления пакетов NuGet.

В частности, эта задача настроит:

  • nuget.exe (версия 4.8.5385 или более поздняя)
  • dotnet/.NET 6 SDK или более поздней версии (для предыдущей версии этой задачи, NuGetAuthenticateV0, требуется .NET Core 2.1, которая больше не поддерживается)
  • MSBuild (версия 15.8.166.59604 или более поздняя)

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

При восстановлении пакета возникают ошибки "Задача была отменена".   Что следует делать?

Известные проблемы в NuGet и в поставщике учетных данных Azure Artifacts могут привести к такой ошибке, и обновление до последней версии NuGet может помочь.

Известная проблема в некоторых версиях nuget/dotnet может вызвать эту ошибку, особенно при большом восстановлении на компьютерах с ограниченными ресурсами. Эта проблема устранена в NuGet 5.2 и пакетах SDK для .NET Core 2.1.80X и 2.2.40X. Если вы используете более раннюю версию, попробуйте обновить версию NuGet или dotnet. Задачу установщика инструментов .NET Core можно использовать для установки более новой версии пакета SDK для .NET Core.

Существуют также известные проблемы с поставщиком учетных данных Azure Artifacts (установленным этой задачей), включая artifacts-credprovider/#77 и artifacts-credprovider/#108. При возникновении этих проблем убедитесь, что у вас есть последний поставщик учетных данных, задав для входных данных forceReinstallCredentialProvider значение true в задаче Проверки подлинности NuGet. Этот параметр также гарантирует автоматическое обновление поставщика учетных данных по мере устранения проблем.

Если ни одно из описанных выше действий не устраняет проблему, включите ведение журнала диагностики подключаемого модуля и сообщите о проблеме в NuGet и поставщик учетных данных Azure Artifacts.

Чем эта задача отличается от задач NuGetCommand и DotNetCoreCLI?

Эта задача настраивает nuget.exe, dotnet и MSBuild для проверки подлинности с помощью Azure Artifacts или других репозиториев, требующих проверки подлинности. После выполнения этой задачи можно вызвать средства на следующем шаге (напрямую или с помощью скрипта) для восстановления или отправки пакетов.

Задачи NuGetCommand и DotNetCoreCLI требуют использования задачи для восстановления или отправки пакетов, так как проверка подлинности в Azure Artifacts настраивается только в течение времени существования задачи. Это может помешать восстановлению или отправке пакетов в собственном скрипте. Это также может препятствовать передаче определенных аргументов командной строки в средство.

Задача NuGetAuthenticate — это рекомендуемый способ использования веб-каналов, прошедших проверку подлинности, в конвейере.

Когда в конвейере следует выполнять эту задачу?

Эта задача должна выполняться перед использованием средства NuGet для восстановления или отправки пакетов в источник пакетов, прошедший проверку подлинности, например Azure Artifacts. Другие требования к упорядочению отсутствуют. Например, эта задача может безопасно выполняться до или после задачи установщика nuGet или средства .NET Core.

Разделы справки настроить источник пакета NuGet, использующий ApiKey ("Ключи API NuGet"), например nuget.org?

Некоторые источники пакетов, такие как nuget.org используют ключи API для проверки подлинности при отправке пакетов, а не username/password учетные данные. Из-за ограничений в NuGet эту задачу нельзя использовать для настройки подключения службы NuGet, использующего ключ API.

Вот как следует поступить вместо этого.

  1. Настройка секретной переменной , содержащей ApiKey
  2. Выполните отправку пакета с помощью nuget push -ApiKey $(myNuGetApiKey) или dotnet nuget push --api-key $(myNuGetApiKey), если вы назвали переменную. myNuGetApiKey

Мой агент находится за веб-прокси. Настроит ли NuGetAuthenticate nuget.exe, dotnet и MSBuild использование прокси-сервера?

Нет. Хотя сама эта задача будет работать за веб-прокси, для использования которого настроен агент, она не настраивает средства NuGet для использования прокси-сервера.

Для этого можно сделать следующее:

  • Задайте переменную http_proxy среды и при no_proxy необходимости задайте параметры прокси-сервера. Дополнительные сведения см. в разделе Переменные среды Интерфейса командной строки NuGet . Эти переменные являются часто используемыми переменными, которые могут также использовать другие средства, не относящиеся к NuGet (например, curl).

    Внимание!
    Переменные http_proxy и no_proxy в операционных системах Linux и Mac чувствительны к регистру и должны быть строчными. Попытка использовать переменную Azure Pipelines для задания переменной среды не будет работать, так как она будет преобразована в верхний регистр. Вместо этого задайте переменные среды на компьютере локального агента и перезапустите агент.

  • Добавьте параметры прокси-сервера в файл nuget.configна уровне пользователя вручную или с помощью nuget config -set , как описано в справочной документации поnuget.config .

    Внимание!
    Параметры прокси-сервера (например, http_proxy) необходимо добавить в конфигурацию на уровне пользователя. Они будут игнорироваться, если они указаны в другом файле nuget.config.

Разделы справки отладку, если у меня возникли проблемы с этой задачей?

Чтобы получить подробные журналы из конвейера, добавьте переменную system.debug конвейера и задайте для значение true.

Как работает эта задача?

Эта задача устанавливает поставщик учетных данных Azure Artifacts в каталог подключаемых модулей NuGet, если он еще не установлен. Затем он задает переменные среды, такие как VSS_NUGET_URI_PREFIXES и VSS_NUGET_ACCESSTOKEN , для настройки поставщика учетных данных. Эти переменные остаются заданными в течение времени существования задания. При восстановлении или отправке пакетов средство NuGet выполняет поставщик учетных данных, который использует указанные выше переменные, чтобы определить, следует ли возвращать учетные данные в средство.

Дополнительные сведения см. в документации по поставщику учетных данных.

Моему конвейеру требуется доступ к веб-каналу в другом проекте

Если конвейер выполняется в проекте, отличном от проекта, в котором размещен веб-канал, необходимо настроить другой проект, чтобы предоставить доступ на чтение и запись к службе сборки. Дополнительные сведения см. в статье Разрешения пакета в Azure Pipelines .

Будет ли это работать для запусков конвейера, которые активируются из внешней вилки?

Нет. Запуски конвейера, активированные из внешней вилки, не имеют доступа к соответствующим секретам для внутренней проверки подлинности веб-канала. Таким образом, будет казаться, что задача проверки подлинности выполнена успешно, но последующие задачи, требующие проверки подлинности (например, отправка Nuget), завершатся сбоем с ошибкой следующего вида: ##[error]The nuget command failed with exit code(1) and error(Response status code does not indicate success: 500 (Internal Server Error - VS800075: The project with id 'vstfs:///Classification/TeamProject/341ec244-e856-40ad-845c-af31c33c2152' does not exist, or you do not have permission to access it. (DevOps Activity ID: C12C19DC-642C-469A-8F58-C89F2D81FEA7)). После объединения запроса на вытягивание в источник конвейер, активироваемый этим событием, будет проходить проверку подлинности должным образом.

Я обновил nuGetAuthenticateV0 до NuGetAuthenticateV1, и теперь моя команда dotnet завершается сбоем с 401

Если вы обновляете NuGetAuthenticateV0 до NuGetAuthenticateV1 и получаете ошибку при выполнении команды dotnet, найдите сообщение It was not possible to find any compatible framework version из журналов. Для пользователей dotnet NuGetAuthenticateV1 требуется .NET 6 вместо .NET Core 2.1, который требуется в NuGetAuthenticateV0 и больше не поддерживается. Чтобы устранить эту проблему, используйте задачу UseDotNet@2 перед командой dotnet для установки .NET 6.

- task: UseDotNet@2
  displayName: Use .NET 6 SDK
  inputs:
    packageType: sdk
    version: 6.x

Примеры

Восстановление и отправка пакетов NuGet в организации

Если все используемые веб-каналы Azure Artifacts находятся в той же организации, что и конвейер, можно использовать задачу NuGetAuthenticate без указания входных данных. Для веб-каналов с областью проекта, которые находятся в проекте, отличном от того, в котором выполняется конвейер, необходимо вручную предоставить проекту и веб-каналу доступ к службе сборки проекта конвейера.

nuget.config

<configuration>
  <packageSources>
    <!-- 
      Any Azure Artifacts feeds within your organization will automatically be authenticated. Both dev.azure.com and visualstudio.com domains are supported.
      Project scoped feed URL includes the project, organization scoped feed URL does not.
    -->
    <add key="MyProjectFeed1" value="https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="MyProjectFeed2" value="https://{organization}.pkgs.visualstudio.com/{project}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="MyOtherProjectFeed1" value="https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed@view}/nuget/v3/index.json" />
    <add key="MyOrganizationFeed1" value="https://pkgs.dev.azure.com/{organization}/_packaging/{feed}/nuget/v3/index.json" />
  </packageSources>
</configuration>

Чтобы использовать подключение службы, укажите подключение службы во входных nuGetServiceConnections данных для задачи Проверки подлинности NuGet. Затем можно ссылаться на подключение службы в -ApiKey AzureArtifacts задаче.

nuget.exe

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: NuGetToolInstaller@1 # Optional if nuget.exe >= 4.8.5385 is already on the path
  inputs:
    versionSpec: '*'
    checkLatest: true
- script: nuget restore
# ...
- script: nuget push -ApiKey AzureArtifacts -Source "MyProjectFeed1" MyProject.*.nupkg

dotnet

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: UseDotNet@2 # Optional if the .NET Core SDK is already installed
- script: dotnet restore
# ...
- script: dotnet nuget push --api-key AzureArtifacts --source https://pkgs.dev.azure.com/{organization}/_packaging/{feed1}/nuget/v3/index.json MyProject.*.nupkg

В приведенных выше примерах и ThirdPartyRepositoryConnection — это имена подключений службы NuGet, OtherOrganizationFeedConnection которые были настроены и авторизованы для использования в конвейере, а URL-адреса соответствуют url-адресам в аргументе nuget.config командной строки или .

URL-адрес источника пакета, указывающий на веб-канал Azure Artifacts, может содержать проект или не содержать его. URL-адрес веб-канала с областью проекта должен содержать проект, а URL-адрес веб-канала с областью действия организации не должен содержать проект. Дополнительные сведения о веб-каналах с областью проекта.

Восстановление и отправка пакетов NuGet за пределы организации

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

nuget.config

<configuration>
  <packageSources>
    <!-- Any Azure Artifacts feeds within your organization will automatically be authenticated -->
    <add key="MyProjectFeed1" value="https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="MyOrganizationFeed" value="https://pkgs.dev.azure.com/{organization}/_packaging/{feed}/nuget/v3/index.json" />
    <!-- Any package source listed here whose URL matches the URL of a service connection in nuGetServiceConnections will also be authenticated.
         The key name here does not need to match the name of the service connection. -->
    <add key="OtherOrganizationFeed" value="https://pkgs.dev.azure.com/{otherorganization}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="ThirdPartyRepository" value="https://{thirdPartyRepository}/index.json" />
  </packageSources>
</configuration>

nuget.exe

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: NuGetToolInstaller@1 # Optional if nuget.exe >= 4.8.5385 is already on the path
  inputs:
    versionSpec: '*'
    checkLatest: true
- script: nuget restore
# ...
- script: nuget push -ApiKey AzureArtifacts -Source "MyProjectFeed1" MyProject.*.nupkg

dotnet

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: UseDotNet@2 # Optional if the .NET Core SDK is already installed
- script: dotnet restore
# ...
- script: dotnet nuget push --api-key AzureArtifacts --source "MyProjectFeed1"  MyProject.*.nupkg

OtherOrganizationFeedConnection и ThirdPartyRepositoryConnection — это имена подключений службы NuGet , которые были настроены и авторизованы для использования в конвейере, а URL-адреса соответствуют url-адресам в аргументе nuget.config или командной строки.

URL-адрес источника пакета, указывающий на веб-канал Azure Artifacts, может содержать проект или не содержать его. URL-адрес веб-канала с областью проекта должен содержать проект, а URL-адрес веб-канала с областью действия организации не должен содержать проект. Дополнительные сведения о веб-каналах с областью проекта.

Требования

Требование Описание
Типы конвейеров YAML, классическая сборка, классический выпуск
Выполняется в Агент, DeploymentGroup
Требования Нет
Capabilities Эта задача не удовлетворяет требованиям для последующих задач в задании.
Ограничения команд Любой
Устанавливаемые переменные Любой
Версия агента 2.144.0 или более поздней версии
Категория задач Пакет
Требование Описание
Типы конвейеров YAML, классическая сборка, классический выпуск
Выполняется в Агент, DeploymentGroup
Требования Нет
Capabilities Эта задача не удовлетворяет требованиям для последующих задач в задании.
Ограничения команд Любой
Устанавливаемые переменные Любой
Версия агента 2.120.0 или более поздней версии
Категория задач Пакет