我想让Jenkins自动从我的Github私有仓库中获取数据,但我不知道如何完成这个任务。试着看了文档,为jenkins用户生成ssh-key,但我看到的是,"无法克隆仓库"。"无法克隆repo"。我检查了URLs - 它们是有效的。
有什么线索吗,也许你知道一些描述这种东西的docsblogswhatever?
也许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:/ 前面的字样)。)
有一件事让我觉得很有用,那就是要确保 github.com
是在 ~jenkins/.ssh/known_hosts
.
如果你需要Jenkins来访问1个以上的项目,你将需要。1.将公钥添加到一个github用户账户 2.将该用户添加为所有者(访问所有项目)或每个项目的合作者。
许多系统用户的公钥无法使用,因为GitHub会找到第一个匹配的部署密钥,并返回错误,如 "错误,拒绝用户repo2的权限给用户repo1 拒绝向userrepo1授予userrepo2的权限"
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
我在gitlab上也遇到了类似的问题。原来我限制了允许通过ssh登录的用户。这不会影响到github用户,但万一人们因为gitlab(和类似的)问题到这里来,请确保你添加了 git
至 AllowUsers
落入 /etc/ssh/sshd_config
:
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers batman git
另一种选择是使用 GitHub个人访问令牌:
https://github.com/my-username/my-project.git
)github-token-for-my-username
我在Jenkins ver.2.222.1和Jenkins GitHub插件1.29.5上进行了测试。2.222.1和Jenkins GitHub插件1.29.5上进行了测试。
除了sergey_mo的答案之外,还有一个办法就是在jenkins服务器上创建多个ssh密钥。
(不过正如第一个对 sergey_mo 的答案发表评论的人所说,这可能会比管理一个密钥对更痛苦。)