NPM对另一个私有Bitbucket repo Azure DevOps管道的依赖关系身份验证失败

NPM对另一个私有Bitbucket repo Azure DevOps管道的依赖关系身份验证失败,azure,npm,azure-devops,yaml,azure-pipelines,Azure,Npm,Azure Devops,Yaml,Azure Pipelines,我正在为一个项目开发Azure DevOps构建管道。除了azure-pipeline.yaml文件之外,我无法对代码本身进行任何更改。老实说,我对项目本身知之甚少 我陷入了NPM安装依赖项步骤。我目前正在使用YAML管道,但如果在经典模式下有解决方案,我将使用它 问题如下: 我已使用创建了管道,并根据文档检查了一个私有Bitbucket存储库: resources: repositories: - repository: MyBitBucketRepo1 type: bitbu

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

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

问题如下:

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

resources:
  repositories:
  - repository: MyBitBucketRepo1
    type: bitbucket
    endpoint: MyBitBucketServiceConnection
    name: MyBitBucketOrgOrUser/MyBitBucketRepo
接下来,我设置节点的正确版本,并执行npm安装任务

到目前为止还不错。但是,存在对另一个Bitbucket存储库的依赖。在package.json中存在如下依赖关系:

another-dependency: git:https://bitbucket.org/organisation/repo.git#v1.1.3
"dependencies": {
    "another-dependency": "git+https://<username>:<password>@bitbucket.org/xxx/repo.git"
}
我确实有权访问此存储库,但如果我运行NPM install,它将无法重新使用第一个存储库中的凭据

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

error fatal: Authentication failed for 'https://bitbucket.org/organisation/repo.git/'
我尝试设置一些缓存机制,在第二个repo上运行npm安装,存储依赖项,在第一个repo上运行npm安装。但不幸的是,这并没有奏效

Azure Devops管道中是否有一种方法可以实现这一点,而无需更改项目设置


谢谢

通常我在回购协议上有.npmrc,因此我不必添加任何其他任务。类似于本指南中的内容:

我从未做过类似的事情,但我认为您可以通过添加此任务的外部提要进行身份验证:

再多读一点,我不知道如果不在回购协议上添加.npmrc,你是否可以做到这一点。您必须创建一个ServiceConnection来存储您的登录凭据,但在此基础上,您需要在Repo上使用.npmrc


试试看,告诉我这是否有帮助

通常我在回购协议上有.npmrc,因此我不必添加任何其他任务。类似于本指南中的内容:

我从未做过类似的事情,但我认为您可以通过添加此任务的外部提要进行身份验证:

再多读一点,我不知道如果不在回购协议上添加.npmrc,你是否可以做到这一点。您必须创建一个ServiceConnection来存储您的登录凭据,但在此基础上,您需要在Repo上使用.npmrc


试试看,告诉我这是否有帮助

Npm将在本地为package.json运行Npm install命令时提示输入密码。由于在CI/CD管道中的管道运行期间无法输入密码,因此会导致身份验证失败错误

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

another-dependency: git:https://bitbucket.org/organisation/repo.git#v1.1.3
"dependencies": {
    "another-dependency": "git+https://<username>:<password>@bitbucket.org/xxx/repo.git"
}
它有缺点,因为我们将应用程序密码直接以纯文本形式存储在package.json文件中,如果其他人可以访问您的package.json文件,则缺乏安全性。因此,这取决于您是否使用此变通方法

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

在npm安装步骤之前,您可以添加一个新的用户名+密码url来替换旧url

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

2.定义一个依赖项。另一个值为git+https://:@bitbucket.org/..的-dependency变量,设置为secret

3.然后添加文件转换任务,如下所示:

another-dependency: git:https://bitbucket.org/organisation/repo.git#v1.1.3
"dependencies": {
    "another-dependency": "git+https://<username>:<password>@bitbucket.org/xxx/repo.git"
}
4.最后您将获得一个新的package.json文件,其内容如下:


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

当您在本地为package.json运行Npm install命令时,Npm将提示输入密码。由于在CI/CD管道中的管道运行期间无法输入密码,因此会导致身份验证失败错误

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

another-dependency: git:https://bitbucket.org/organisation/repo.git#v1.1.3
"dependencies": {
    "another-dependency": "git+https://<username>:<password>@bitbucket.org/xxx/repo.git"
}
它有缺点,因为我们将应用程序密码直接以纯文本形式存储在package.json文件中,如果其他人可以访问您的package.json文件,则缺乏安全性。因此,这取决于您是否使用此变通方法

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

在npm安装步骤之前,您可以添加一个新的用户名+密码url来替换旧url

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

2.定义一个依赖项。另一个值为git+https://:@bitbucket.org/..的-dependency变量,设置为secret

3.然后添加文件转换任务,如下所示:

another-dependency: git:https://bitbucket.org/organisation/repo.git#v1.1.3
"dependencies": {
    "another-dependency": "git+https://<username>:<password>@bitbucket.org/xxx/repo.git"
}
4.最后您将获得一个新的package.json文件,其内容如下:


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

您好,谢谢您的回复。我尝试了“npm身份验证”,但在Azure Devops中添加了.npmrc服务连接。但我无法验证。它期待着一场胜利
类型为“external npm registry”的服务连接和前端项目中的依赖项指向Bitbucket存储库,而不是注册表。我会再次尝试一下Azure人工制品,好吧,我让它工作了,但不是我想要的工作方式。因此,如果有其他选择,请告诉我。我所做的;我在第二个存储库上运行了npm安装,并在Devops工件中创建了一个提要和一个npm发布。在第一次回购中,我更改了git的依赖关系:https://bitbucket.org/organisation/repo.gitv1.1.3 到工件中的包。但我必须对这两个回购协议进行修改,以使其能够正常工作。添加npmrc并更改依赖项。谢谢你的帮助。谢谢你的回复。我尝试了“npm身份验证”,但在Azure Devops中添加了.npmrc服务连接。但我无法验证。它需要类型为“external npm registry”的服务连接,前端项目中的依赖项指向Bitbucket存储库,而不是注册表。我会再次尝试一下Azure人工制品,好吧,我让它工作了,但不是我想要的工作方式。因此,如果有其他选择,请告诉我。我所做的;我在第二个存储库上运行了npm安装,并在Devops工件中创建了一个提要和一个npm发布。在第一次回购中,我更改了git的依赖关系:https://bitbucket.org/organisation/repo.gitv1.1.3 到工件中的包。但我必须对这两个回购协议进行修改,以使其能够正常工作。添加npmrc并更改依赖项。谢谢你的帮助。谢谢你的回复。不太喜欢在package.json中将密码作为纯文本使用。@vieskees同意你的观点,将密码作为纯文本添加并不好。我根据我原来的答案想出了一个新的解决办法,请检查它是否适合你。如果你对此有任何担心,请告诉我。哈,那看起来很有趣!下周我一定会试试的!我会让你知道它是否有效。Thanks@vieskees如果您对我的解决方案有任何疑问,请随时告诉我,我可以向您展示更多细节:嗨,谢谢您的回复。不太喜欢在package.json中将密码作为纯文本使用。@vieskees同意你的观点,将密码作为纯文本添加并不好。我根据我原来的答案想出了一个新的解决办法,请检查它是否适合你。如果你对此有任何担心,请告诉我。哈,那看起来很有趣!下周我一定会试试的!我会让你知道它是否有效。Thanks@vieskees如果您对我的解决方案有任何疑问,请随时告诉我,我可以向您展示更多详细信息:嗨,朋友,有更新吗?你试过我最新的解决方法了吗?我还没来得及测试它。。会尽快回复您@LanceLi MSFTHi friend,有任何更新吗?你试过我最新的解决方法了吗?我还没来得及测试它。。我们会尽快回复您@LanceLi MSFT