npmAuthenticate@0 - npm 对任务运行器) v0 任务 (进行身份验证

使用此任务为存储库中的文件提供 npm 生成范围的凭据 .npmrcnpm这样,以及 npm gulp 和 Grunt 等任务运行程序就可以向专用注册表进行身份验证。

语法

# npm authenticate (for task runners) v0
# Don't use this task if you're also using the npm task. Provides npm credentials to an .npmrc file in your repository for the scope of the build. This enables npm task runners like gulp and Grunt to authenticate with private registries.
- task: npmAuthenticate@0
  inputs:
    workingFile: # string. Required. .npmrc file to authenticate. 
    #customEndpoint: # string. Credentials for registries outside this organization/collection.
# npm Authenticate (for task runners) v0
# Don't use this task if you're also using the npm task. Provides npm credentials to an .npmrc file in your repository for the scope of the build. This enables npm task runners like Gulp and Grunt to authenticate with private registries.
- task: npmAuthenticate@0
  inputs:
    #workingFile: # string. .npmrc file to authenticate. 
    #customEndpoint: # string. Credentials for registries outside this account/collection.

输入

workingFile - 要进行身份验证的 .npmrc 文件
string. 必需。

指定要使用的注册表的文件路径 .npmrc 。 选择文件,而不是文件夹,例如 /packages/mypackage.npmrc


workingFile - 要进行身份验证的 .npmrc 文件
string.

指定要使用的注册表的文件路径 .npmrc 。 选择文件,而不是文件夹,例如 /packages/mypackage.npmrc


customEndpoint - 此组织/集合外部的注册表的凭据
string.

此组织或集合外部注册表的 npm 服务连接 名称的逗号分隔列表。 指定的 .npmrc 文件必须包含与服务连接对应的注册表项。 如果只需要此组织或集合中的注册表,请将此字段留空。 将自动使用生成的凭据。


customEndpoint - 此帐户/集合之外的注册表的凭据
string.

此组织或集合外部注册表的 npm 服务连接 名称的逗号分隔列表。 指定的 .npmrc 文件必须包含与服务连接对应的注册表项。 如果只需要此组织或集合中的注册表,请将此字段留空。 将自动使用生成的凭据。


任务控件选项

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

输出变量

无。

备注

使用此任务为存储库中的文件提供 npm 生成范围的凭据 .npmrcnpm这样,以及 npm gulp 和 Grunt 等任务运行程序就可以向专用注册表进行身份验证。

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

此任务在指定 .npmrc 文件中搜索注册表项,然后将发现的注册表的身份验证详细信息追加到文件的末尾。 对于当前组织/集合中的所有注册表,将使用生成的凭据。 对于不同组织中的注册表或由第三方托管的注册表,注册表 URI 将与输入指定的 customEndpointnpm 服务连接的 URI 进行比较,并使用相应的凭据。 文件 .npmrc 将在管道执行结束时还原为其原始状态。

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

在使用 npmnpm 任务运行程序安装包或将包推送到经过身份验证的 npm 存储库(如 Azure Artifacts)之前,必须运行此任务。 没有其他订购要求。

我有多个 npm 项目。 是否需要为每个 .npmrc 文件运行此任务?

此任务一次只向一个 .npmrc 文件添加身份验证详细信息。 如果需要对多个 .npmrc 文件进行身份验证,可以多次运行任务,每个文件运行 .npmrc 一次。 或者,请考虑创建一个 .npmrc 文件来指定项目使用的所有注册表, npmAuthenticate 并在此 .npmrc 文件上运行,然后设置环境变量以将此 .npmrc 文件指定为 npm 每用户配置文件。

- task: npmAuthenticate@0
  inputs:
    workingFile: $(agent.tempdirectory)/.npmrc
- script: echo ##vso[task.setvariable variable=NPM_CONFIG_USERCONFIG]$(agent.tempdirectory)/.npmrc
- script: npm ci
  workingDirectory: project1
- script: npm ci
  workingDirectory: project2

我的代理位于 Web 代理后面。 是否会 npmAuthenticate 设置为 npm/gulp/Grunt 使用我的代理?

答案是“否”。 虽然此任务本身将在 代理配置为使用的 Web 代理后面工作,但它不会配置 npmnpm 任务运行器来使用代理。

为此,可以:

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

  • 手动将代理设置添加到 npm 配置,方法是使用 npm 配置集,或通过设置前缀为 的NPM_CONFIG_环境变量

    警告:
    npm 任务运行器可能与 支持 npm的所有代理配置方法不兼容。

  • 调用 npm时,使用命令行标志指定代理。

    - script: npm ci --https-proxy $(agent.proxyurl)
    

如果代理需要身份验证,则可能需要添加额外的生成步骤来构造经过身份验证的代理 URI。

- script: node -e "let u = url.parse(`$(agent.proxyurl)`); u.auth = `$(agent.proxyusername):$(agent.proxypassword)`; console.log(`##vso[task.setvariable variable=proxyAuthUri;issecret=true]` + url.format(u))"
- script: npm publish --https-proxy $(proxyAuthUri)

我的管道需要访问其他项目中的源

如果管道在与托管源的项目不同的项目中运行,则必须设置另一个项目以授予对生成服务的读/写访问权限。 有关更多详细信息 ,请参阅 Azure Pipelines 中的包权限

示例

从组织内的注册表还原 npm 项目的包

如果你使用的唯一经过身份验证的注册表是组织中的 Azure Artifacts 注册表,则只需指定任务文件npmAuthenticate的路径.npmrc

.npmrc

registry=https://pkgs.dev.azure.com/{organization}/_packaging/{feed}/npm/registry/
always-auth=true

npm

- task: npmAuthenticate@0
  inputs:
    workingFile: .npmrc
- script: npm ci
# ...
- script: npm publish

还原和发布 npm 组织外部的包

.npmrc如果包含来自不同组织的 Azure Artifacts 注册表或使用第三方经过身份验证的包存储库,则需要设置 npm 服务连接并在输入中customEndpoint指定它们。 Azure Artifacts 组织中的注册表也将自动进行身份验证。

.npmrc

registry=https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed}/npm/registry/
@{scope}:registry=https://pkgs.dev.azure.com/{otherorganization}/_packaging/{feed}/npm/registry/
@{otherscope}:registry=https://{thirdPartyRepository}/npm/registry/
always-auth=true

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

npm

- task: npmAuthenticate@0
  inputs:
    workingFile: .npmrc
    customEndpoint: OtherOrganizationNpmConnection, ThirdPartyRepositoryNpmConnection
- script: npm ci
# ...
- script: npm publish -registry https://pkgs.dev.azure.com/{otherorganization}/_packaging/{feed}/npm/registry/

OtherOrganizationNpmConnectionThirdPartyRepositoryNpmConnection 是已配置和授权在管道中使用的 npm 服务连接 的名称,其 URL 与指定 .npmrc 文件中的 URL 匹配。

要求

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