Jenkins 管道私有存储库依赖

Jenkins pipeline private repository dependency

我在一个存储库中有一个 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 Branch Source 插件),并在两个 bitbucket 项目中也添加了密钥。另一个项目(没有依赖项)的管道工作正常,所以我认为这不是 ssh 密钥的问题。 package.json 中的依赖行如下所示:

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

也试过

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

有人遇到过类似的问题吗?

When I do the yarn install in local, it works perfectly, but in jenkins it's fails

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

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

OP 添加:

I have chosen to delete the passphrase from the ssh key and it works correctly.

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

感谢VonC留言,我 调试詹金斯:

ssh -v bitbucket.org

我可以看出问题是 jenkins 试图启动一个 tty 来询问密码

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

最后我选择从 ssh 密钥中删除密码并且它工作正常。