我希望Jenkins能够从我在Github上托管的私有存储库中自动获取数据 . 但我不知道如何完成这项任务 . 试过文档,为jenkins用户生成ssh-key,所有我能看到的是:“无法克隆回购” . 我检查了网址 - 它们是有效的 .
任何线索,也许你知道一些文档/博客/什么描述这种东西?
也许GitHub对_1534521的支持正是您所需要的?引用该页面:
我什么时候应该使用部署密钥?很简单,当您的服务器需要拉取访问单个私人仓库时 . 此密钥直接附加到存储库而不是个人用户帐户 .
如果这是你正在尝试的并且它不起作用,你可能想要更新你的问题,包括使用的URL的更多细节,密钥文件的名称和位置等 .
现在的技术部分:如何使用Jenkins的SSH密钥?
如果您有一个 jenkins unix用户,则可以将部署密钥存储在 ~/.ssh/id_rsa 中 . 当Jenkins尝试通过ssh克隆repo时,它会尝试使用该密钥 .
jenkins
~/.ssh/id_rsa
在某些设置中,您无法将Jenkins作为自己的用户帐户运行,也可能无法使用默认的ssh密钥位置 ~/.ssh/id_rsa . 在这种情况下,您可以在其他位置创建密钥,例如 ~/.ssh/deploy_key ,并配置 ssh 以将其与 ~/.ssh/config 中的条目一起使用:
~/.ssh/deploy_key
ssh
~/.ssh/config
Host github-deploy-myproject HostName github.com User git IdentityFile ~/.ssh/deploy_key IdentitiesOnly yes
因为所有使用 git@github.com 对所有Github存储库进行身份验证,并且您不希望上述密钥用于与Github的所有连接,所以我们创建了一个主机别名github-deploy-myproject . 您的克隆URL现在变为
git@github.com
git clone github-deploy-myproject:myuser/myproject
这也是你作为存储库URL放入Jenkins的内容 .
(请注意,为了使其正常工作,您不能将ssh://放在前面 . )
这对我有用的一件事是确保 github.com 在 ~jenkins/.ssh/known_hosts .
github.com
~jenkins/.ssh/known_hosts
如果您需要Jenkins访问超过1个项目,您需要:1.将公钥添加到一个github用户帐户2.将此用户添加为所有者(以访问所有项目)或作为每个项目中的协作者 .
一个系统用户的许多公钥将无法工作,因为GitHub将找到第一个匹配的部署密钥,并将发回错误,如 "ERROR: Permission to user/repo2 denied to user/repo1"
http://help.github.com/ssh-issues/
Jenkins在系统上创建了一个用户Jenkins . 必须为Jenkins用户生成ssh密钥 . 以下是步骤:
sudo su jenkins -s /bin/bash cd ~ mkdir .ssh // may already exist cd .ssh ssh-keygen
现在,您可以使用SSH密钥在Jenkins仪表板上添加凭据创建Jenkins凭据
选择此选项
私钥:来自Jenkins大师〜/ .ssh
我和gitlab有类似的问题 . 事实证明我限制了允许通过ssh登录的用户 . 这不会影响github用户,但是如果人们在这里遇到gitlab(等)问题,请确保将 git 添加到 /etc/ssh/sshd_config 中的 AllowUsers 设置:
git
/etc/ssh/sshd_config
AllowUsers
# Authentication: LoginGraceTime 120 PermitRootLogin no StrictModes yes AllowUsers batman git
sergey_mo的答案的另一种方法是在jenkins服务器上创建多个ssh密钥 .
(虽然作为sergey_mo回答的第一个评论者说,这可能最终比管理一个密钥对更痛苦 . )
6 回答
也许GitHub对_1534521的支持正是您所需要的?引用该页面:
如果这是你正在尝试的并且它不起作用,你可能想要更新你的问题,包括使用的URL的更多细节,密钥文件的名称和位置等 .
现在的技术部分:如何使用Jenkins的SSH密钥?
如果您有一个
jenkins
unix用户,则可以将部署密钥存储在~/.ssh/id_rsa
中 . 当Jenkins尝试通过ssh克隆repo时,它会尝试使用该密钥 .在某些设置中,您无法将Jenkins作为自己的用户帐户运行,也可能无法使用默认的ssh密钥位置
~/.ssh/id_rsa
. 在这种情况下,您可以在其他位置创建密钥,例如~/.ssh/deploy_key
,并配置ssh
以将其与~/.ssh/config
中的条目一起使用:因为所有使用
git@github.com
对所有Github存储库进行身份验证,并且您不希望上述密钥用于与Github的所有连接,所以我们创建了一个主机别名github-deploy-myproject . 您的克隆URL现在变为这也是你作为存储库URL放入Jenkins的内容 .
(请注意,为了使其正常工作,您不能将ssh://放在前面 . )
这对我有用的一件事是确保
github.com
在~jenkins/.ssh/known_hosts
.如果您需要Jenkins访问超过1个项目,您需要:
1.将公钥添加到一个github用户帐户
2.将此用户添加为所有者(以访问所有项目)或作为每个项目中的协作者 .
一个系统用户的许多公钥将无法工作,因为GitHub将找到第一个匹配的部署密钥,并将发回错误,如 "ERROR: Permission to user/repo2 denied to user/repo1"
http://help.github.com/ssh-issues/
Jenkins在系统上创建了一个用户Jenkins . 必须为Jenkins用户生成ssh密钥 . 以下是步骤:
现在,您可以使用SSH密钥在Jenkins仪表板上添加凭据创建Jenkins凭据
选择此选项
我和gitlab有类似的问题 . 事实证明我限制了允许通过ssh登录的用户 . 这不会影响github用户,但是如果人们在这里遇到gitlab(等)问题,请确保将
git
添加到/etc/ssh/sshd_config
中的AllowUsers
设置:sergey_mo的答案的另一种方法是在jenkins服务器上创建多个ssh密钥 .
(虽然作为sergey_mo回答的第一个评论者说,这可能最终比管理一个密钥对更痛苦 . )