【问题标题】:NPM dependencies to another private Bitbucket repo Azure DevOps pipeline authentication failsNPM 依赖于另一个私有 Bitbucket 存储库 Azure DevOps 管道身份验证失败
【发布时间】:2020-10-15 21:41:41
【问题描述】:

我正在为一个项目开发 Azure DevOps 构建管道。除了 azure-pipeline.yaml 文件之外,我无法对代码本身进行任何更改。 (老实说,我对项目本身知之甚少)

我卡在 NPM 安装依赖项步骤上。我目前正在使用 YAML 管道,但如果在经典模式下有解决方案,我会采用。

问题如下:

我已经创建了管道,并根据文档检查了一个私有 Bitbucket 存储库:

resources:
  repositories:
  - repository: MyBitBucketRepo1
    type: bitbucket
    endpoint: MyBitBucketServiceConnection
    name: MyBitBucketOrgOrUser/MyBitBucketRepo

接下来我设置正确的node版本,并执行npm install任务

- task: Npm@1
  displayName: 'NPM install'
  inputs:
    command: 'install'
    workingDir: 'the working directory'

到目前为止一切顺利。但是,存在对另一个 Bitbucket 存储库的依赖关系。在 package.json 中有这样的依赖:

another-dependency: git:https://bitbucket.org/organisation/repo.git#v1.1.3

我确实有权访问此存储库,但如果我运行 NPM install 它无法重新使用第一个存储库中的凭据。

我已尝试将两个存储库都添加到resources,希望能奏效。但还是同样的错误:

error fatal: Authentication failed for 'https://bitbucket.org/organisation/repo.git/'

我尝试设置一些缓存机制,在第二个 repo 上运行 npm install,存储依赖项,在第一个 repo 上运行 npm install。但不幸的是,这并没有奏效。

Azure Devops 管道中是否有一种方法(无需更改项目设置)来完成这项工作?

谢谢!

【问题讨论】:

  • 嗨,朋友,这个有什么更新吗?你试过我最新的解决方法吗?
  • 我还没有时间测试它.. 会尽快回复你@LanceLi-MSFT

标签: azure npm azure-devops yaml azure-pipelines


【解决方案1】:

通常我在 Repo 上有 .npmrc,所以我不必添加任何其他任务。本指南中的内容如下: https://docs.microsoft.com/en-us/azure/devops/artifacts/get-started-npm?view=azure-devops&tabs=windows

而且我从来没有做过这样的事情,但我认为您可以通过添加此任务的外部提要进行身份验证: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/package/npm-authenticate?view=azure-devops

阅读更多内容,我不知道您是否可以在不添加 .npmrc 的情况下执行此操作。您必须创建一个 ServiceConnection 来存储您的登录凭据,但在此基础上您需要在您的 Repo 中使用 .npmrc。

试试看,如果这有帮助,告诉我!!

【讨论】:

  • 您好,感谢您的回复。我在 Azure Devops 中使用服务连接尝试了“npm-authenticate”(尽管必须添加 .npmrc)。但我无法进行身份验证。它“期望'external npm registry'类型的服务连接”并且前端项目中的依赖项指向Bitbucket存储库而不是注册表。将尝试使用 Azure 工件
  • 你好,好吧,我让它工作了,但不是我想要的工作方式。因此,如果有其他选择,请告诉我。我做了什么;我在第二个存储库上运行了npm install,并在 Devops 工件和npm publish 中创建了一个提要。在第一个 repo 中,我将依赖项从 git:https://bitbucket.org/organisation/repo.git#v1.1.3 更改为工件中的包。但是我必须对两个 repo 进行更改才能使其正常工作(添加 .npmrc 并更改了依赖项)。感谢您的帮助
【解决方案2】:

当您在本地为您的package.json 运行npm install 命令时,Npm 将提示您输入密码。由于CI/CD流水线运行时无法输入密码,导致Authentication failed错误。

另一种解决方法是在网址中直接添加凭据,如下所示:

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

app-password:

username: your normal Bitbucket username
password: the app password

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

作为 Azure Devops 管道的解决方法:

您可以在 npm 安装步骤之前添加 File Transform task 以用新的用户名+密码 url 替换旧 url。

1.我在根目录中有一个 package.json,其内容类似于 git:https://bitbucket.org/organisation/repo.git#v1.1.3

2.定义一个dependencies.another-dependency变量,值为git+https://&lt;username&gt;:&lt;password&gt;@bitbucket.org/...,设置为secret!

3.然后像这样添加File Transform task

4.最后你会得到一个新的 package.json 文件,内容如下:

它实际上不会影响您在版本控制下的 package.json 文件,它只是在您的管道期间临时添加凭据。让我知道是否有帮助:)

【讨论】:

  • 您好,感谢您的回复。不太喜欢在 package.json 中将密码用作纯文本。
  • @vieskees 同意你的观点,将密码添加为纯文本并不是那么好。我根据我的原始答案找到了一个新的解决方法,请检查它是否适合您。如果您对此有任何疑虑,请告诉我。
  • 哈,这看起来很有趣!下周我一定会试一试的!我会让你知道它是否有效。谢谢
  • @vieskees 如果您对我的解决方法有任何疑问,请随时告诉我,我可以向您展示更多详细信息 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 2017-10-30
  • 2022-10-17
相关资源
最近更新 更多