Jenkins - 无法从slave节点git克隆.SSH密钥

non*_*ter 11 git ssh hudson slave jenkins

我刚刚建立了我的第一个詹金斯奴隶.我运行构建,我遇到了SSH密钥的问题.主Jenkins服务器在用户'jenkins'下运行.我已经设置了SSH密钥,这样我就可以在没有密码的情况下从主服务器SSH到从服务器.

例如,来自大师:

jenkins@master:~$ ssh slave
Last login: Tue Apr 17 10:30:22 2012 from masterjenkins.com
$ whoami
jenkins
Run Code Online (Sandbox Code Playgroud)

这样就证明了从节点也在'jenkins'用户下运行.(我已将jenkins @ slave的公共ssh密钥复制到远程git服务器).而且我可以从slave手动发出git clone,但是当我从master中启动构建时,我得到了以下类型的消息:

    ERROR: Error cloning remote repo 'origin' : Could not clone git@host:abc
hudson.plugins.git.GitException: Could not clone git@host:abc
Caused by: hudson.plugins.git.GitException: Error performing command: git clone --progress -o origin git@host:abc /var/lib/jenkins/workspace/abc_build
Command "git clone --progress -o origin git@host:abc /var/lib/jenkins/workspace/abc_build" returned status code 128: Initialized empty Git repository in /var/lib/jenkins/workspace/abc_build/.git/
Host key verification failed.
fatal: The remote end hung up unexpectedly
Caused by: hudson.plugins.git.GitException: Command "git clone --progress -o origin git@host:abc /var/lib/jenkins/workspace/abc_build" returned status code 128: Initialized empty Git repository in /var/lib/jenkins/workspace/abc_build/.git/
Host key verification failed.
fatal: The remote end hung up unexpectedly
Trying next repository
ERROR: Could not clone repository
FATAL: Could not clone
Run Code Online (Sandbox Code Playgroud)

所以它仍然暗示我的SSH密钥设置不正确.谁能告诉我需要复制哪些键?

非常感谢, ns

And*_*ell 5

根据克隆URL,您会看到混合了两种不同的身份验证方法.您正在尝试SSH到主机的用户gitjenkins.通常,当您托管自己的GIT存储库并使用git @ servername:reponame进行克隆时,您会使用类似gitolite的内容.

你有没有像gitolite那样设置什么?

尝试使用像这样的ssh'ing作为jenkins用户.

ssh git@slave 
Run Code Online (Sandbox Code Playgroud)

然后看看它返回了什么.这是一个更符合git@host:abc您的SSH的SSH .

如果您没有在服务器计算机上设置任何其他内容,请将您的克隆网址更改为 jenkins@host:pathtorepo

更新

/home/git/.ssh/authorized_keys

应该有这样的条目:(这一切都在一行)

# gitolite start
command="/home/git/bin/gl-auth-command jenkins",no
-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAt3+od84Gc9NBVrVb3MKjekHcBDwXXONnVYMNVpuRadoz/FPJTkOIxozKVPJDPI670O252giYpF59sOKqAJL0xEVUrhq8cDFuFwQsSAp0ed1kp/GRxx+pwytL58rcVJEHAy2DkD1z5HlNaZyvIxQyfLTnYfuL1Hx6Qe7dal7mXO0= keycomment
# gitolite end
Run Code Online (Sandbox Code Playgroud)

在gitolite中为jenkins添加存储库权限:(您可能必须在托管存储库的同一台计算机上克隆,作为gitolite用户)

git clone git@host:gitolite-admin 
cd gitolite-admin
cd conf
vi gitolite.conf
Run Code Online (Sandbox Code Playgroud)

现在找到'abc'的条目,或者如果它不存在则添加一个

repo    abc
  RW+            = jenkins
Run Code Online (Sandbox Code Playgroud)

现在提交并推送更改

git commit -a -m "Adding user jenkins to repo abc"
git push
Run Code Online (Sandbox Code Playgroud)

现在ssh git@host再试一次,看看gitolite是否告诉你新的权限.

  • @nonshatter,"有一件事让我烦恼的是,我无法轻易找到一个简单的方法来看看jenkins在奴隶身上的运行方式" - 一种方法就是创建一个附属于奴隶的工作`whoami `在shell构建步骤中. (2认同)