Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证Github专用存储库的Jenkins CI_Git_Continuous Integration_Hudson_Github_Jenkins - Fatal编程技术网

验证Github专用存储库的Jenkins CI

验证Github专用存储库的Jenkins CI,git,continuous-integration,hudson,github,jenkins,Git,Continuous Integration,Hudson,Github,Jenkins,我希望Jenkins能够自动从Github上托管的私有存储库获取数据。 但是我不知道如何完成那项任务。。尝试了文档,为jenkins用户生成了ssh密钥,我看到的是:“无法克隆repo”。我已经检查了URL,它们是有效的 任何线索,也许你知道一些文档/博客/任何描述这类东西的东西?也许GitHub的支持就是你想要的?引用该页: 什么时候应该使用部署密钥? 很简单,当您的服务器需要对单个私有repo进行拉式访问时。此密钥直接附加到存储库,而不是个人用户帐户 如果这是您已经在尝试的,但它不起作用,那

我希望Jenkins能够自动从Github上托管的私有存储库获取数据。 但是我不知道如何完成那项任务。。尝试了文档,为jenkins用户生成了ssh密钥,我看到的是:“无法克隆repo”。我已经检查了URL,它们是有效的


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

也许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一对密钥),并且采用此答案中列出的方法变得更加容易