验证Github专用存储库的Jenkins CI
我希望Jenkins能够自动从Github上托管的私有存储库获取数据。 但是我不知道如何完成那项任务。。尝试了文档,为jenkins用户生成了ssh密钥,我看到的是:“无法克隆repo”。我已经检查了URL,它们是有效的验证Github专用存储库的Jenkins CI,git,continuous-integration,hudson,github,jenkins,Git,Continuous Integration,Hudson,Github,Jenkins,我希望Jenkins能够自动从Github上托管的私有存储库获取数据。 但是我不知道如何完成那项任务。。尝试了文档,为jenkins用户生成了ssh密钥,我看到的是:“无法克隆repo”。我已经检查了URL,它们是有效的 任何线索,也许你知道一些文档/博客/任何描述这类东西的东西?也许GitHub的支持就是你想要的?引用该页: 什么时候应该使用部署密钥? 很简单,当您的服务器需要对单个私有repo进行拉式访问时。此密钥直接附加到存储库,而不是个人用户帐户 如果这是您已经在尝试的,但它不起作用,那
任何线索,也许你知道一些文档/博客/任何描述这类东西的东西?也许GitHub的支持就是你想要的?引用该页: 什么时候应该使用部署密钥? 很简单,当您的服务器需要对单个私有repo进行拉式访问时。此密钥直接附加到存储库,而不是个人用户帐户 如果这是您已经在尝试的,但它不起作用,那么您可能需要更新您的问题,提供所使用URL的更多详细信息、关键文件的名称和位置等
现在是技术部分:如何在Jenkins中使用SSH密钥 例如,如果您有
jenkins
unix用户,您可以将部署密钥存储在~/.ssh/id\u rsa
中。当Jenkins试图通过ssh克隆repo时,它将尝试使用该密钥
在某些设置中,您不能将Jenkins作为自己的用户帐户运行,也可能不能使用默认的ssh密钥位置~/.ssh/id\u rsa
。在这种情况下,您可以在不同的位置创建密钥,例如~/.ssh/deploy\u key
,并将ssh
配置为与~/.ssh/config
中的条目一起使用:
Host github-deploy-myproject
HostName github.com
User git
IdentityFile ~/.ssh/deploy_key
IdentitiesOnly yes
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers batman git
因为您使用git@github.com
如果您不希望上述密钥用于所有与Github的连接,我们创建了一个主机别名Github deploy myproject。您的克隆URL现在变为
git clone github-deploy-myproject:myuser/myproject
这也是您作为存储库URL放入Jenkins的内容
(请注意,您不能将ssh://放在前面,这样才能工作。)让我工作的一件事是确保
github.com
位于~jenkins/.ssh/known_hosts
如果您需要jenkins访问一个以上的项目,您需要:1.向一个github用户帐户添加公钥
2.将此用户添加为所有者(以访问所有项目)或每个项目中的协作者 一个系统用户的多个公钥将不起作用,因为GitHub将找到第一个匹配的部署密钥,并将返回错误,如“错误:拒绝用户/repo2对用户/repo1的权限”
sergey_mo的答案的另一种选择是在jenkins服务器上创建多个ssh密钥
(尽管正如sergey_mo回答的第一位评论者所说,这可能比管理单个密钥对更痛苦。)我对gitlab也有类似的问题。事实证明,我限制了允许通过ssh登录的用户。这不会影响github用户,但如果有人因为gitlab(以及类似问题)来到这里,请确保将
git
添加到/etc/ssh/sshd\u config
中的AllowUsers
设置中:
Host github-deploy-myproject
HostName github.com
User git
IdentityFile ~/.ssh/deploy_key
IdentitiesOnly yes
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers batman git
Jenkins在系统上创建一个用户Jenkins。必须为Jenkins用户生成ssh密钥。 以下是步骤:
sudo su jenkins -s /bin/bash
cd ~
mkdir .ssh // may already exist
cd .ssh
ssh-keygen
现在,您可以使用SSH密钥创建Jenkins凭据
关于詹金斯仪表盘
添加凭据
选择此选项
私钥:来自Jenkins master ~/.ssh
另一种选择是使用:
- 去
- 增加回购范围
- 在Jenkins中,添加一个GitHub源
- 使用存储库HTTPS URL
- 添加git repo的HTTPSURL(而不是SSHURL,例如
)https://github.com/my-username/my-project.git
- 添加凭证
- 种类:用户名和密码
- 用户名:GitHub用户名
- 密码:您在GitHub上创建的个人访问令牌
- ID:类似于我的用户名的github令牌
我在Jenkins ver上测试了这个。2.222.1和Jenkins GitHub插件1.29.5,带有私有GitHub repo。Bur如何为Jenkins创建密钥?部署密钥只是任何旧的SSH密钥。我所做的是以用户Jenkins的身份运行
ssh-keygen
(我的Ubuntu服务器上的“Jenkins”)。然后,我将~jenkins/.ssh/id\u rsa.pub
添加到github上存储库的deploy keys部分。在某些安装中,您需要将其删除到~
目录中。但是进入/var/lib/jenkins/.ssh/
,让默认的jenkins用户使用这些密钥!要跟进@garmoncheg的评论,请注意/var/lib/jenkins
是jenkins
用户的主目录(~
)。有人知道如何使用部署挂钩吗?我在钩子日志中看到类似于的错误与github部署myproject:myuser/myproject
不匹配。我已经输入了它,作为我的Repo URL和构建,这样它就可以访问GitHub了。只是GitHub的帖子未能触发构建。我回答了一个类似的问题,你可以在下面的链接中看到答案:这修复了我在设置密钥对后在何处遇到的问题,git推送失败在我的案例中,最简单的方法是执行“sudo su jenkins”,因为无法以jenkins用户的身份正确登录。拥有jenkins标识后,您可以手动ssh登录到github/bitbucket,并代表jenkins用户接受远程主机密钥。但是,如果您将jenkins初始化作为开发环境“引导”的一部分,该怎么办。这方面的“手动”不起作用如果您只有一个存储库,那么关于使用部署密钥的答案非常有用。但是,当您希望CI服务器跨多个repo构建项目时,您就可以立即管理多组密钥(每个repo一对密钥),并且采用此答案中列出的方法变得更加容易