Azure 管道在 npm 安装时失败,因为 package.json 引用了它无权访问的另一个存储库

问题描述

您好,我在我们的项目中添加一个 javascript 组件。该组件位于一个通用的 ui 存储库中。当我将此组件添加到 package.json 时,它在本地构建得很好,因为我有权通过 SSH 将其拉下来。但在 azure dev ops 中,我们拥有管道,但由于管道无法访问,因此无法构建。

例如:

主应用程序:位于https://visualstudio.com/app/_git/app/ 组件库位于 https://visualstudio.com/library/_git/Common-Library#tag-v1.0.3-gitpkg

因此,当我将库添加到我的 package.json 并将其推送到存储库时,在 npm install 上的 Dev Ops 中,MVN 构建失败

otf

MVN 构建无权从其存储库中提取自定义组件。

package.json 示例

[INFO] npm ERR! 
[INFO] npm ERR! Host key verification Failed.
[INFO] npm ERR! fatal: Could not read from remote repository.
[INFO] npm ERR! 

我的理解是,我可以向 azure 添加一个 SSH 密钥以允许它拉下存储库,但我们的开发运营人员不希望那样做,因为那样 SSH 密钥就与那个人绑定了。

是否有其他方法可以使 MVN 构建可以访问存储库?

解决方法

另一种解决方法是直接在 url 中添加凭据(https 和 oauth),例如像这样:

"dependencies": {
    "another-dependency": "git+https://<username>:<password>@bitbucket.org/xxx/repo.git"
}

它有一个缺点,因为我们将凭证直接以纯文本形式存储在 package.json 文件中,如果其他人可以访问您的 package.json 文件,则缺乏安全性。因此,是否使用此解决方法取决于您。

如果您不想使用纯文本,您可以在 npm 安装步骤之前添加一个 File Transform 任务,用新的认证网址替换旧网址。

定义一个值为 dependencies.another-dependencygit+https://<username>:<password>@xxx.org/... 变量,并将其设置为机密。

enter image description here

使用 File Transform 任务替换 package.json 文件中的 url。

enter image description here