我正在为一个项目开发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管道中是否有一种方法-无需更改项目设置即可完成这项工作?
谢谢!
答案 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。
尝试一下,告诉我是否有帮助!
答案 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.json
。
2。用值package.json
定义一个git:https://bitbucket.org/organisation/repo.git#v1.1.3
变量,将其设置为秘密!
3。然后像这样添加dependencies.another-dependency
:
4。最后,您将获得一个新的package.json文件,其内容如下:
它实际上不会影响版本控制下的package.json文件,它只是在管道中临时添加凭据。让我知道是否有帮助:)