NPM对另一个私有Bitbucket存储库Azure DevOps管道身份验证的依赖性失败

时间:2020-06-25 12:21:56

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

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

我陷入了NPM安装依赖项步骤。我目前正在使用YAML管道,但是如果有经典模式下的解决方案,我会继续使用。

问题如下:

我创建了管道,并根据文档检出了专用的Bitbucket存储库:

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

下一步,我设置正确的节点版本,并执行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安装,它将无法重新使用第一个存储库中的凭据。

我尝试将两个存储库都添加到resources中,以期希望能奏效。但仍然是相同的错误:

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

我试图建立一些缓存机制,在第二个仓库中运行npm install,存储依赖项,在第一个仓库中运行npm install。但这不幸地没有奏效。

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

谢谢!

2 个答案:

答案 0 :(得分:0)

通常我在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。 enter image description here

尝试一下,告诉我是否有帮助!

答案 1 :(得分:0)

当您在本地运行Long.valueOf(jo.get("ipInt").toString()); 的{​​{1}}命令时,Npm会提示您输入密码。由于我们在CI / CD管道中进行管道运行时无法输入密码,因此会导致npm install错误。

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

package.json

请参见app-password

Authentication failed

它有一个缺点,因为我们将应用程序密码直接以纯文本格式存储在"dependencies": { "another-dependency": "git+https://<username>:<password>@bitbucket.org/xxx/repo.git" } 文件中,如果其他人可以访问您的username: your normal Bitbucket username password: the app password 文件,这将缺乏安全性。因此,取决于您是否使用此替代方法。

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

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

1。我在根目录中有一个package.json,其内容类似于package.jsonenter image description here

2。用值package.json定义一个git:https://bitbucket.org/organisation/repo.git#v1.1.3变量,将其设置为秘密!

enter image description here

3。然后像这样添加dependencies.another-dependency

enter image description here

4。最后,您将获得一个新的package.json文件,其内容如下:

enter image description here

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