Поделиться через


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

Configure NuGet tools to authenticate with Azure Artifacts and other NuGet repositories. Требуется 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:
    #azureDevOpsServiceConnection: # string. Alias: workloadIdentityServiceConnection. Optional. Use when nuGetServiceConnections == ''. 'Azure DevOps' Service Connection. 
    #feedUrl: # string. Optional. Use when workloadIdentityServiceConnection != ''. Azure Artifacts URL. 
    #forceReinstallCredentialProvider: false # boolean. Reinstall the credential provider even if already installed. Default: false.
    #nuGetServiceConnections: # string. Service connection credentials for feeds outside this organization.
# 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.

Входы

azureDevOpsServiceConnection - 'Azure DevOps' Сервисное соединение
Псевдоним ввода: workloadIdentityServiceConnection. string. Необязательный. Используется при nuGetServiceConnections == ''.

Если это установлено — feedUrl обязательно. Все остальные входные данные игнорируются.


feedUrl - Azure Artifacts URL
string. Необязательный. Используется при workloadIdentityServiceConnection != ''.

Если это установлено — workloadIdentityServiceConnection обязательно. Все остальные входные данные игнорируются. Несовместимо с nuGetServiceConnections. URL ленты должен быть в формате индекса сервисов NuGet: https://pkgs.dev.azure.com/{ORG_NAME}/{PROJECT}/_packaging/{FEED_NAME}/nuget/v3/index.json.


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

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


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

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


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

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

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

Никакой.

Замечания

Важный

Эта задача совместима только с 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 Credential Provider могут вызывать подобные ошибки, и обновление до последней версии nuget может помочь.

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

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

Если ни один из этих факторов не решит проблему, включите Plugin Diagnostic Logging и сообщите о проблеме в NuGet а также в Azure Artifacts Credential Provider.

Как эта задача отличается от задач 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 CLI. Эти переменные часто используются переменными, которые также могут использовать другие средства, отличные от 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 Credential Provider в каталог плагинов NuGet, если он ещё не установлен. Затем он задает переменные среды, такие как VSS_NUGET_URI_PREFIXES и VSS_NUGET_ACCESSTOKEN для настройки поставщика учетных данных. Эти переменные остаются заданными для времени существования задания. При восстановлении или отправке пакетов средство NuGet выполняет поставщик учетных данных, который использует указанные выше переменные, чтобы определить, следует ли возвращать учетные данные обратно в средство.

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

Мой конвейер должен получить доступ к веб-каналу в другом проекте

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

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

Нет. Запуски конвейера, которые активируются из внешней вилки, не имеют доступа к соответствующим секретам для проверки подлинности внутреннего веб-канала. Таким образом, задача проверки подлинности будет успешно выполнена, но последующие задачи, требующие проверки подлинности (например, push-отправка 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

В приведенных выше примерах OtherOrganizationFeedConnection и ThirdPartyRepositoryConnection — это имена подключений службы NuGet , настроенных и авторизованных для использования в конвейере, а также 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-адреса, соответствующие nuget.config или аргументу командной строки.

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

Требования

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