【问题标题】:Installing private dependencies via npm in a VS Team Services CI build在 VS Team Services CI 构建中通过 npm 安装私有依赖项
【发布时间】:2019-09-08 11:55:15
【问题描述】:

我正在 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 test 步骤。

【问题讨论】:

  • 您可以添加更多详细信息吗?你有一个构建定义吗?这些 Git 存储库是如何关联的? package.json 文件长什么样子?
  • @LucaCappa 我已根据您的要求添加了一些详细信息。感谢您的回复,我希望我的补充可以为您澄清我的问题。
  • 你能展示你的构建定义吗?
  • @Marina-MSFT 感谢您的回复。我添加了几个构建定义的屏幕截图。再次,我希望他们有所帮助。同样,npm install 步骤失败了,因为不存在克隆私有存储库的适当权限。
  • @chazzlabs 如果在依赖项中将项目名称更改为 "git+ssh://git@github.com:my-org/project-name.git#master""git+https://github.com/my-org/project-name.git#master",构建日志是什么?

标签: node.js npm azure-devops


【解决方案1】:

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

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

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

【讨论】:

  • 卢卡,感谢您的回答。这似乎是唯一的解决方案,但不幸的是似乎不适合我们当前的工作流程。令牌可以作为环境变量注入到我们的构建中,但这可能会给我们的开发人员带来问题,因为如果没有在每个开发人员的机器上设置环境变量,npm 将无法从我们的私有存储库中提取。
  • 卢卡,我接受了你的回答,因为这似乎是我问题的正确解决方案。正如我在之前的评论中提到的,不幸的是它并没有解决我的问题。再次感谢您的意见。
【解决方案2】:

最近我需要在 基于 Windows 的代理上的 Azure Devops 中执行此操作,而不是更改依赖项以在 packages.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"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    相关资源
    最近更新 更多