npmAuthenticate@0 - npm 身份验证(适用于任务运行程序)v0 任务

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

语法

# 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.

输入

workingFile - .npmrc 文件进行身份验证
string。 必填。

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


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

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


任务控制选项

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

输出变量

没有。

注解

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

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

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

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

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

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

此任务一次只会向一个 .npmrc 文件添加身份验证详细信息。 如果需要对多个 .npmrc 文件进行身份验证,可以针对每个 .npmrc 文件运行一次任务。 或者,请考虑创建一个 .npmrc 文件,指定项目使用的所有注册表,在此 .npmrc 文件上运行 npmAuthenticate,然后设置环境变量以将此 .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 注册表,则只需指定 .npmrc 文件到 npmAuthenticate 任务的路径。

.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 服务连接的名称,并且具有与指定 .npmrc 文件中的 URL 匹配的 URL。

要求

要求 说明
管道类型 YAML,经典版本,经典版本
运行时间 代理,DeploymentGroup
需求 没有
功能 此任务不满足作业中后续任务的任何要求。
命令限制 任何
Settable 变量 任何
代理版本 2.115.0 或更高版本
任务类别 封装件