在VS Team Services CI构建中通过npm安装私有依赖项

时间:2017-02-16 20:42:17

标签: node.js npm azure-devops

我在VS Team Services中设置了一些NodeJS项目的CI版本。我目前有四个项目是从私有Github存储库克隆的,运行npm install并运行单元测试。因为我正在为VS Team Services构建一个用于克隆的存储库的访问令牌,所以这些构建都会通过。

第五个项目依赖于其他四个项目之一作为package.json中的依赖项。尝试克隆私有存储库时,此项目的构建在npm install上失败,因为构建没有克隆存储库的权限。如何在npm install期间提供此构建访问权限以克隆我们的私有存储库?

我为五个项目中的每一个都有一个构建定义,每个项目都是Github上my-org的单独存储库。在每个构建定义中,与Github的连接由个人访问令牌管理,存储库指向my-org/project-name。第五个失败的构建中的项目的package.json文件具有dependencies配置,如下所示:

  "dependencies": {
    "project-name": "git+ssh://git@github.com/my-org/project-name.git#master",
    "jquery": "^2.2.4",
    "react": "^15.0.1",
    "react-dom": "^15.0.1"
  }

第一张图片显示了我的构建定义的npm install步骤。 npm install build step

第二张图片显示了我的构建定义的npm test步骤。 npm test build step

2 个答案:

答案 0 :(得分:0)

问题是构建代理程序无法进行身份验证,因为构建代理程序上缺少SSH密钥,并且主机验证无论如何都会失败。

相反,您应该在GitHub上使用' repo'创建Personal Access Token范围,然后您应该在packages.json文件中使用它(请注意ssh已替换为https协议):

"project-name": "git+https://<user>:<token>@github.com/my-org/project-name.git#master",

答案 1 :(得分:0)

最近,我需要在基于Windows的代理上的Azure Devops中执行此操作,而不是更改依赖关系以将用户和令牌包含在package.json中,创建创建步骤以添加起来更加容易从环境变量到Windows凭据存储的身份验证信息,并指示git使用它。

git config --global credential.helper wincred
cmdkey /generic:LegacyGeneric:target=git:https://our-private-domain.com /user:git-readonly-use@our-private-domain.com /pass:"Personal Access Token With Read Permissions"

添加这些配置后,我们使用源代码中的脚本进行的Npm安装顺利完成

"dependencies": {
"example-1": "git+https://our-private-domain.com/proj/example-1.git#v0.1.9",
"example-2": "git+https://our-private-domain.com/proj/example-2.git#master"
}