EC2/AWS, Jenkins, Git, SSH

5

[更新2] 当我从CLI运行git时,它提示我输入密码,这样可以吗?我能够使用ssh私钥的密码短语访问github服务器,但在Jenkins中我从未被要求提供此密码。 [/更新2]

[更新] 是的。我在EC2上的ubuntu实例上运行此操作。我已在/var/lib/jenkins/.ssh中生成了ssh密钥,这是Jenkins创建的用户。我已将Jenkins中的安全选项设置为使用Unix用户/组。 [/更新]

我正在尝试让Jenkins从git (github)拉取代码。我遇到以下错误:

hudson.plugins.git.GitException: Could not clone [my personal repo]
    at hudson.plugins.git.GitAPI.clone(GitAPI.java:245)
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1121)
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1063)
    at hudson.FilePath.act(FilePath.java:832)
    at hudson.FilePath.act(FilePath.java:814)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1063)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1218)
    at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:581)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:470)
    at hudson.model.Run.run(Run.java:1434)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:239)
Caused by: hudson.plugins.git.GitException: Command "git clone --progress -o origin git@github.com:bobbylo/Verbify.git /var/lib/jenkins/.jenkins/jobs/build_dev/workspace" returned status code 128:
stdout: Initialized empty Git repository in /var/lib/jenkins/.jenkins/jobs/build_dev/workspace/.git/

stderr: Permission denied (publickey).
fatal: The remote end hung up unexpectedly

我已经完成了Github ssh教程。我在EC2实例上生成了私钥,并将其放置在用户jinkens的.ssh目录中。我尝试过将公钥放置于Github上(尝试过Deploy Key和普通SSH Key)。我已经验证了能够使用CLI进行git的传输操作(如pull,clone等),并且它可以正常工作。我正确设置了unix用户/组的权限(事实上当我更改时,我会在Jenkin的控制台日志中看到错误日志的变化)。但是当我尝试使用Jenkin git插件或执行Jenkins shell命令时,我会遇到上述错误。
我已经阅读了有关ssh-agent和ssh-add的信息,以及您如何将其与shell启动脚本绑定,以便您不需要为每个命令输入密码 - 我不确定这在这里是否相关。
否则,我不知道还能尝试什么。任何提示都将有所帮助!

而且https://dev59.com/UGw15IYBdhLWcg3wmM19没有帮助吗? - VonC
你在使用Linux系统吗?如果是的话,那么Jenkins可能正在以用户“jenkins”的身份运行。用户“jenkins”是否可以访问必要的SSH密钥(可能位于/var/lib/jenkins/.ssh目录下)? - clstrfsck
我正在AWS上的Ubuntu盒子上。是的,我使用的用户是在/var/lib/jenkins中的jenkins。 - tom
1
正如我上面所提到的:当我从CLI运行git命令时,必须输入ssh密钥的释义。对于我设置的其他ssh密钥,一旦正确设置了私钥-公钥配对,就不需要密码了,是吗?我可以通过在.bashrc中编写脚本将其添加到我的ssh-agent中。我的问题是:Jenkins是否启动一个适当的shell并执行该脚本以启动进程? - tom
3个回答

4
我想到了一个解决方法:
如果你不作为守护进程运行,那么它会使用你运行时的shell环境。而且任何需要用户提示的命令(例如ssh密码) Jenkins都将视为错误。
现在的解决方案是:
在将github pub key添加到ssh-agent中之后再运行Jenkins,这样就不会提示密码了。
如果我想将Jenkins作为守护进程运行,那么我想在运行之前正确设置ssh-agent(我认为它不会使用当前的shell环境?)。

0

0
我曾经遇到过类似的问题,解决方法是确保在以jenkins用户身份登录后生成部署密钥,该用户是jenkins安装的一部分,然后将公钥复制到github的部署密钥中,在此之后重新启动jenkins服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接