包: npm 对任务流的任务 (进行身份验证)
Azure DevOps Services
使用此任务可为存储库中的文件提供 npm 凭据 .npmrc ,以获取生成范围。 这使得 npm 以及 npm 任务流(如 gulp 和 Grunt)能够通过专用注册表进行身份验证。
YAML 代码段
# npm authenticate
# 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 and npm task runners like gulp and Grunt to authenticate with private registries.
- task: npmAuthenticate@0
inputs:
#workingFile:
#customEndpoint: # Optional
参数
| 参数 | 说明 |
|---|---|
workingFile要进行身份验证的 .npmrc 文件 |
.Npmrc 文件的路径,该文件指定要使用的注册表。 选择该文件,而不是文件夹。 例如/packages/mypackage.npmrc " |
customEndpoint此组织/集合外部的注册表的凭据 |
(可选) 逗号分隔的列表,其中列出了此组织/集合外部的注册表的 npm service 连接名称。 指定 .npmrc 的文件必须包含与服务连接对应的注册表项。 如果你只需要此组织/集合中的注册表项,请将其留空。 将自动使用生成的凭据。 |
示例
从组织中的注册表还原项目的 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/
OtherOrganizationNpmConnection 和 ThirdPartyRepositoryNpmConnection 是已配置并授权在管道中使用的 npm 服务连接 的名称,并且具有与指定 .npmrc 文件中的 Url 相匹配的 url。
开源
此任务在 GitHub 上开放源代码。 欢迎提供反馈和建议。
常见问题解答
此任务是如何工作的?
此任务将在指定 .npmrc 的文件中搜索注册表项,然后将发现的注册表的身份验证详细信息追加到文件末尾。 对于当前组织/集合中的所有注册表,使用生成的凭据。 对于另一个组织中的注册表或由第三方托管的注册表,会将注册表 Uri 与输入指定 customEndpoint 的npm 服务连接的 uri 进行比较,并将使用相应的凭据。 在管道执行结束时, .npmrc 文件将恢复为其原始状态。
应在管道中运行此任务吗?
必须先运行此任务,然后才能使用 npm 或 npm 任务运行程序将包安装或推送到经过身份验证的 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 代理的后面工作,但它不会将 npm 或 npm 任务运行程序配置为使用代理。
为此,可以执行以下任一操作:
设置环境变量
http_proxy/https_proxy,并根据需要no_proxy设置代理设置。 有关详细信息,请参阅 npm config 。 请注意,这些是通常使用的变量,其他非 npm 工具 (例如,卷) 也可能使用。通过使用npm config 集或设置前缀为
NPM_CONFIG_的环境变量,将代理设置手动添加到npm 配置。警告:
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 中的包权限。