NuGetAuthenticate@1 - NuGet 身份验证 v1 任务

配置 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

可选。 将凭据提供程序重新安装到用户配置文件目录(即使已安装)。 如果凭据提供程序已安装在用户配置文件中,则任务确定是否被任务提供的凭据提供程序覆盖。 这可能会升级 (凭据提供程序) 降级。


任务控件选项

除任务输入外,所有任务都有控制选项。 有关详细信息,请参阅 控制选项和常见任务属性

输出变量

无。

备注

重要

此任务仅与 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 项目凭据提供程序中的已知问题可能会导致此类错误,更新到最新的 nuget 可能会有所帮助。

某些版本的 nuget/dotnet 中的 已知问题 可能会导致此错误,尤其是在资源受限的计算机上进行大型还原时。 NuGet 5.2 和 .NET Core SDK 2.1.80X 和 2.2.40X 中修复了此问题。 如果使用的是旧版本,请尝试升级 NuGet 或 dotnet 版本。 .NET Core 工具安装程序任务可用于安装较新版本的 .NET Core SDK。

此任务) 安装的 Azure 项目凭据提供程序 (也存在已知问题,包括 artifacts-credprovider/#77artifacts-credprovider/#108。 如果遇到这些问题,请确保在 NuGet 身份验证任务中将输入forceReinstallCredentialProvidertrue设置为 ,确保具有最新的凭据提供程序。 此设置还将确保凭据提供程序在问题得到解决时自动更新。

如果上述两项都无法解决问题,请启用 插件诊断日志记录 ,并将问题报告给 NuGetAzure Artifacts 凭据提供程序

此任务与 NuGetCommand 和 DotNetCoreCLI 任务有何不同?

此任务将 nuget.exe、dotnet 和 MSBuild 配置为使用 Azure Artifacts 或其他需要身份验证的存储库进行身份验证。 运行此任务后,可以在后续步骤中直接或通过脚本) 调用工具,以还原或推送包 (。

NuGetCommand 和 DotNetCoreCLI 任务需要使用 任务还原或推送包,因为对 Azure Artifacts 的身份验证仅在任务的生存期内配置。 这可以防止你在自己的脚本中还原或推送包。 它还可能会阻止将特定的命令行参数传递给工具。

建议使用 NuGetAuthenticate 任务在管道中使用经过身份验证的源。

应在管道中何时运行此任务?

必须先运行此任务,然后才能使用 NuGet 工具将包还原或推送到经过身份验证的包源(如 Azure Artifacts)。 没有其他订购要求。 例如,此任务可以在 NuGet 或 .NET Core 工具安装程序任务之前或之后安全运行。

如何实现配置使用 ApiKey (“NuGet API 密钥”) (例如 nuget.org)的 NuGet 包源?

某些包源(如 nuget.org)在推送包时使用 API 密钥进行身份验证,而不是 username/password 使用凭据。 由于 NuGet 中的限制,此任务不能用于设置使用 API 密钥的 NuGet 服务连接。

应该:

  1. 配置包含 ApiKey 的机密变量
  2. 使用 nuget push -ApiKey $(myNuGetApiKey)dotnet nuget push --api-key $(myNuGetApiKey)执行包推送,假设你命名了变量 myNuGetApiKey

我的代理位于 Web 代理后面。 NuGetAuthenticate 是否会将 nuget.exe、dotnet 和 MSBuild 设置为使用我的代理?

错误。 虽然此任务本身将在 代理已配置为使用的 Web 代理后面工作,但它不会将 NuGet 工具配置为使用该代理。

为此,你可以:

  • 将环境变量 http_proxy 设置为代理设置( no_proxy 可选)。 有关详细信息 ,请参阅 NuGet CLI 环境变量 。 这些变量是其他非 NuGet 工具 ((例如 curl) )也可以使用的常用变量。

    警告:
    http_proxyno_proxy 变量在 Linux 和 Mac 操作系统上区分大小写,并且必须小写。 尝试使用 Azure Pipelines 变量设置环境变量将不起作用,因为它将转换为大写。 而是在自承载代理的计算机上设置环境变量,然后重新启动代理。

  • 手动或使用 nuget config -set 将代理设置添加到用户级nuget.config文件,如nuget.config参考文档中所述。

    警告:
    必须将代理设置 ((如 http_proxy) )添加到用户级配置。如果在其他nuget.config文件中指定,将忽略它们。

如果此任务出现问题,如何实现调试?

若要从管道获取详细日志,请添加管道变量 system.debug 并将其设置为 true

此任务的工作原理是什么?

此任务会将 Azure 项目凭据提供程序 安装到 NuGet 插件目录(如果尚未安装)。 然后,它会设置环境变量(如 VSS_NUGET_URI_PREFIXESVSS_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 中需要它,不再受支持。 若要解决此问题,请在 dotnet 命令之前使用 UseDotNet@2 任务安装 .NET 6。

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

示例

在组织内还原和推送 NuGet 包

如果使用的所有 Azure 项目源都与管道位于同一组织中,则可以使用 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>

若要使用服务连接,请在 NuGet 身份验证任务的输入中 nuGetServiceConnections 指定服务连接。 然后,可以在任务中引用服务 -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

在上面的示例中, OtherOrganizationFeedConnectionThirdPartyRepositoryConnectionNuGet 服务连接 的名称,这些连接已配置并授权在管道中使用,并且具有与 或 命令行参数中的 nuget.config URL 匹配的 URL。

指向 Azure Artifacts 源的包源 URL 可能包含项目,也可能不包含该项目。 项目范围的源的 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

OtherOrganizationFeedConnectionThirdPartyRepositoryConnection 是已配置和授权在管道中使用的 NuGet 服务连接 的名称,其 URL 与 nuget.config 或命令行参数中的 URL 匹配。

指向 Azure Artifacts 源的包源 URL 可能包含项目,也可能不包含该项目。 项目范围的源的 URL 必须包含项目,组织范围的源的 URL 不得包含该项目。 详细了解 项目范围的源

要求

要求 说明
管道类型 YAML,经典内部版本,经典发布
运行平台 Agent、DeploymentGroup
需求
功能 此任务不满足作业中后续任务的任何要求。
命令限制 任意
可设置的变量 任意
代理版本 2.144.0 或更高版本
任务类别 程序包
要求 说明
管道类型 YAML,经典内部版本,经典发布
运行平台 Agent、DeploymentGroup
需求
功能 此任务不满足作业中后续任务的任何要求。
命令限制 任意
可设置的变量 任意
代理版本 2.120.0 或更高版本
任务类别 程序包