为Github私有仓库认证Jenkins CI。

问题描述 投票:136回答:7

我想让Jenkins自动从我的Github私有仓库中获取数据,但我不知道如何完成这个任务。试着看了文档,为jenkins用户生成ssh-key,但我看到的是,"无法克隆仓库"。"无法克隆repo"。我检查了URLs - 它们是有效的。

有什么线索吗,也许你知道一些描述这种东西的docsblogswhatever?

git continuous-integration hudson github jenkins
7个回答
139
投票

也许GitHub的支持 调配钥匙 是你要找的吗? 引用该页面的内容。

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

很简单,当你有一台服务器需要拉取访问一个私有的repo时。这个密钥直接连接到仓库,而不是个人用户账户。

如果这是你已经尝试过的,但还不行,你可能需要更新你的问题,提供更多的细节,包括正在使用的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

因为所有的Github仓库的认证都是通过使用 [email protected] 而你又不想让上面的密钥被用于所有与Github的连接,我们创建了一个主机别名为 github-deploy-myroject(我的项目). 你的克隆网址现在变成了

git clone github-deploy-myproject:myuser/myproject

这也是你放的 储存库URL 到Jenkins中。

(注意,你必须 ssh:/ 前面的字样)。)


36
投票

有一件事让我觉得很有用,那就是要确保 github.com 是在 ~jenkins/.ssh/known_hosts.


13
投票

如果你需要Jenkins来访问1个以上的项目,你将需要。1.将公钥添加到一个github用户账户 2.将该用户添加为所有者(访问所有项目)或每个项目的合作者。

许多系统用户的公钥无法使用,因为GitHub会找到第一个匹配的部署密钥,并返回错误,如 "错误,拒绝用户repo2的权限给用户repo1 拒绝向userrepo1授予userrepo2的权限"

http:/help.github.comssh-issues。


6
投票

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

sudo su jenkins -s /bin/bash
cd ~
mkdir .ssh // may already exist
cd .ssh
ssh-keygen

现在,你可以创建一个Jenkins凭证使用SSH密钥在Jenkins仪表板上添加凭证。

选择此选项

私钥。从Jenkins主站~.ssh


1
投票

我在gitlab上也遇到了类似的问题。原来我限制了允许通过ssh登录的用户。这不会影响到github用户,但万一人们因为gitlab(和类似的)问题到这里来,请确保你添加了 gitAllowUsers 落入 /etc/ssh/sshd_config:

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

0
投票

另一种选择是使用 GitHub个人访问令牌:

  • 前往 https:/github.comsettingstokensnew。
  • 添加 回购 范围
  • 在Jenkins中,添加一个 GitHub 源头
  • 使用存储库HTTPS URL
  • 添加 HTTPS git repo的URL(而不是git repo的 SSH 一,例如。https://github.com/my-username/my-project.git)
  • 增加凭证
    • 种类: 带密码的用户名
    • 用户名:GitHub的用户名
    • 密码,即您在GitHub上创建的个人访问令牌。您在GitHub上创建的个人访问令牌。
    • 身份证:类似 github-token-for-my-username

我在Jenkins ver.2.222.1和Jenkins GitHub插件1.29.5上进行了测试。2.222.1和Jenkins GitHub插件1.29.5上进行了测试。


-1
投票

除了sergey_mo的答案之外,还有一个办法就是在jenkins服务器上创建多个ssh密钥。

(不过正如第一个对 sergey_mo 的答案发表评论的人所说,这可能会比管理一个密钥对更痛苦。)

© www.soinside.com 2019 - 2024. All rights reserved.