【问题标题】:Jenkins pipeline private repository dependencyJenkins 管道私有存储库依赖
【发布时间】:2017-10-30 14:34:40
【问题描述】:

我在存储库中有一个 Jenkins 管道,并且该存储库的 package.json 依赖于另一个存储库(两者都是 Bitbucket 私有存储库)。当我在本地进行 yarn install 时,它可以完美运行,但在 jenkins 中却因以下错误而失败:

yarn install v1.2.1
[1/5] Validating package.json...
[2/5] Resolving packages...
error Command failed.
Exit code: 128
Command: git
Arguments: ls-remote --tags --heads ssh://git@bitbucket.org/user/repo.git
Directory: /var/lib/jenkins/workspace/s_repo_branch-
YJRVO7LRN3U452ZV2XNZJUB35FGSW2NXEAUPBCDKUVTKUFAHHBDA
Output:
Permission denied (publickey).
fatal: Could not read from remote repository.

我在主机上添加了 ssh 密钥,添加为扫描组织文件夹的 jenkins 凭据(使用 Bitbucket 分支源插件),并在两个 bitbucket 项目中添加了密钥。另一个项目(没有依赖关系)的管道正常工作,所以我认为这不会是 ssh 密钥的问题。 package.json 中的依赖行如下所示:

"repo": "ssh://bitbucket.org/user/repo.git#develop"

也试过了

"repo": "git+ssh://bitbucket.org/user/repo.git#develop"

有人遇到过类似问题吗?

【问题讨论】:

    标签: git ssh bitbucket jenkins-pipeline yarnpkg


    【解决方案1】:

    当我在本地安装 yarn 时,它运行良好,但在 jenkins 中却失败了

    这是一个典型的 git,它也没有在你期望的地方搜索(应该在运行 Jenkins/.ssh 的帐户中)

    调试此问题的一个好方法是设置变量GIT_SSH_COMMAND=ssh -v(使用JENKINS EnvInject Plugin),以便在使用ssh 协议调用git 时查看使用了哪些键。

    OP 补充说:

    我已选择从 ssh 密钥中删除密码,它可以正常工作。

    这表明将缓存密码的ssh-agent 正在用户帐户中运行,但不在 Jenkins 帐户中。

    【讨论】:

      【解决方案2】:

      感谢 VonC 消息,我 调试詹金斯:

      ssh -v bitbucket.org
      

      我可以看到问题在于 jenkins 试图启动一个 tty 来询问密码

      debug1: read_passphrase: can't open /dev/tty: No such device or address
      

      最后我选择从 ssh 密钥中删除密码,它可以正常工作。

      【讨论】:

      • 为了避免 tty 问题,你可以做一个 ssh -Tv bitbucket.org,但是是的,不使用密码更简单
      • 我已经编辑了我的答案以解决您的观察。
      猜你喜欢
      • 1970-01-01
      • 2022-11-24
      • 2018-04-02
      • 2021-12-07
      • 2012-04-03
      • 1970-01-01
      • 2017-09-28
      • 2020-10-15
      • 2016-03-18
      相关资源
      最近更新 更多