为Github私有存储库验证Jenkins CI

时间:2011-03-06 17:58:24

标签: git continuous-integration hudson github jenkins

我希望Jenkins能够从我在Github上托管的私有存储库中自动获取数据。 但我不知道如何完成这项任务。试过文档,为jenkins用户生成ssh-key,所有我能看到的是:“无法克隆回购”。我检查了网址 - 它们是有效的。

任何线索,也许你知道一些文档/博客/其他什么描述这种东西?

6 个答案:

答案 0 :(得分:136)

也许GitHub对deploy keys的支持正是你要找的?引用该页面:

  

我应该何时使用部署密钥?

     

简单,当您的服务器需要对单个私人仓库进行拉取访问时。此密钥直接附加到存储库而不是个人用户帐户。

如果这是你正在尝试的并且它不起作用,你可能想要更新你的问题,包括使用的URL的更多细节,密钥文件的名称和位置等。


现在技术部分:如何在Jenkins中使用SSH密钥?

如果您拥有jenkins unix用户,则可以将部署密钥存储在~/.ssh/id_rsa中。当Jenkins尝试通过ssh克隆repo时,它会尝试使用该密钥。

在某些设置中,您无法将Jenkins作为自己的用户帐户运行,也可能无法使用默认的ssh密钥位置~/.ssh/id_rsa。在这种情况下,您可以在其他位置创建密钥,例如~/.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 < / em>的。您的克隆网址现在变为

git clone github-deploy-myproject:myuser/myproject

这也是您将存储库URL 放入Jenkins的内容。

(请注意,您必须 ssh:// 放在前面才能使其正常工作。)

答案 1 :(得分:36)

让我感到满意的一件事是确保github.com位于~jenkins/.ssh/known_hosts

答案 2 :(得分:13)

如果您需要Jenkins访问超过1个项目,您需要:
1.将公钥添加到一个github用户帐户
2.将此用户添加为所有者(以访问所有项目)或作为每个项目中的协作者。

一个系统用户的许多公钥将无法工作,因为GitHub将找到第一个匹配的部署密钥,并将发回错误,如“错误:用户/ repo2拒绝用户/ repo1的权限”

http://help.github.com/ssh-issues/

答案 3 :(得分:1)

我和gitlab有类似的问题。事实证明我限制了允许通过ssh登录的用户。这不会影响github用户,但如果人们在这里遇到gitlab(等)问题,请确保将git添加到AllowUsers中的/etc/ssh/sshd_config设置:

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers batman git

答案 4 :(得分:1)

另一种选择是使用GitHub personal access tokens

  • 转到https://github.com/settings/tokens/new
  • 添加回购范围
  • 在Jenkins中,添加一个 GitHub
  • 使用存储库HTTPS URL
  • 添加git repo的 HTTPS URL(不是 SSH ,例如https://github.com/my-username/my-project.git
  • 添加凭据
    • 种类:带密码的用户名
    • 用户名:GitHub用户名
    • 密码:您在GitHub上创建的个人访问令牌
    • ID:类似github-token-for-my-username

我在詹金斯ver。版上对此进行了测试。 2.222.1和带有私有GitHub存储库的Jenkins GitHub插件1.29.5。

答案 5 :(得分:-1)

来自sergey_mo的答案的另一种方法是在jenkins服务器上创建多个ssh密钥。

(虽然作为sergey_mo回答的第一个评论者说,这可能最终比管理一个密钥对更痛苦。)