为Github私有存储库验证Jenkins CI

bx2*_*bx2 133 git continuous-integration hudson github jenkins

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

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

Mar*_*air 137

也许GitHub对部署密钥的支持是您正在寻找的?引用该页面:

我什么时候应该使用部署密钥?

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

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


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

如果你有一个jenkinsunix用户,你可以存储你的部署密钥~/.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
Run Code Online (Sandbox Code Playgroud)

因为您使用所有Github存储库进行身份验证,git@github.com并且您不希望将上述密钥用于与Github的所有连接,所以我们创建了一个主机别名github-deploy-myproject.您的克隆URL现在变为

git clone github-deploy-myproject:myuser/myproject
Run Code Online (Sandbox Code Playgroud)

这也是你作为存储库URL放入Jenkins的内容.

(请注意,为了使其正常工作,您不能ssh://放在前面.)

  • 在某些安装上你需要把它放到`~`目录中.但是对于`/ var/lib/jenkins/.ssh /`,默认的jenkins用户使用这些键! (10认同)
  • 要跟进@garmoncheg的注释,请注意`/ var/lib/jenkins`*是`jenkins`用户的主目录(`~`). (7认同)
  • "部署密钥"只是任何旧的SSH密钥.我做的是运行`ssh-keygen`作为用户Jenkins运行(我的Ubuntu服务器上的"jenkins").然后我将`~jenkins/.ssh/id_rsa.pub`添加到github上的存储库的deploy keys部分. (5认同)
  • Bur你怎么为詹金斯创造一把钥匙? (4认同)

Edw*_*son 36

让这对我有用的一件事是确保它github.com~jenkins/.ssh/known_hosts.


Ser*_*vyi 13

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

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

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

  • 如果您只有一个存储库,那么使用部署密钥的答案非常有用.但是当您希望CI服务器跨多个存储库构建项目时,您立即处于管理多组密钥(每个存储库一对)的位置,并且采用此答案中列出的方法变得更加容易. (2认同)

Ray*_*Ray 6

Jenkins在系统上创建一个用户Jenkins。ssh密钥必须为Jenkins用户生成。步骤如下:

sudo su jenkins -s /bin/bash
cd ~
mkdir .ssh // may already exist
cd .ssh
ssh-keygen
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用SSH密钥在Jenkins仪表板上添加Jenkins凭据。

选择这个选项

私钥:来自Jenkins主服务器〜/ .ssh