GitHub 组织仓库与 Jenkins (GitHub 插件) 的集成

6
我在GitHub上有一个组织,其中包含私人仓库。我还在服务器上运行了Jenkins,它在8080端口上运行,并安装了GitHub插件。我为我的Jenkins用户在GitHub上创建了一个帐户,该用户属于所有者组。
我试图在我的开发分支(或主分支,两者似乎都不起作用)推送更改时触发Jenkins上的任务。
当我查看Jenkins中的GitHub Hook日志时,它说轮询尚未运行。当我进入“管理Jenkins”时,GitHub插件会在测试时显示我的帐户已验证。
您知道如何配置吗?我有多个仓库需要处理,因此部署密钥对我来说似乎不是解决方案。
3个回答

8

更新:

正如Craig Ringer他的回答中提到的那样,您可以在GitHub插件设置的“配置Jenkins”下选择Grant READ permissions for /github-webhook,允许调用Webhook而无需进行身份验证。

另一个更新:现在(2014年12月)可以为组织使用Webhooks:请参见组织的WebHooks API


注意:问题4hudson-github-plugin是关于以下内容的:
Last GitHub Push

Polling has not run yet.

结论是:

没关系,唯一缺失的部分是github用户的权限复选框,在互联网上没有任何文档记录。

那么这是关于您的Jenkins用户的权限问题吗?

文章 "Set up Jenkins-CI on Ubuntu for painless Rails3 app CI testing" 包括以下流程:

为了限制CI系统并允许您的团队成员使用或查看构建日志,首先您需要创建一个账户。
1. 进入“管理Jenkins > 配置系统”页面, 2. 选中“启用安全性”复选框, 3. 在“安全领域”下,选择Jenkins自带的用户数据库, 4. 选中“允许用户注册”复选框, 5. 在“授权”下,选择“基于项目矩阵授权策略”, 6. 添加两个用户,“admin”和“GitHub”(注意:管理员访问的用户名必须是“admin”)。“GitHub”用户只需选择整体只读权限。稍后我们将使用此用户进行GitHub hook操作。
注:在上述步骤中添加的“admin”和“GitHub”用户并未创建用户。然后,您需要创建一个具有相同名称的真实用户。是的,我知道,在Jenkins UI下有点奇怪。
7. 进入“管理Jenkins > 管理用户 > 创建用户”页面,创建“admin”和“GitHub”用户。

使用Github webhook进行对接

现在,为了在Github上推送新提交或分支时自动运行构建,我们必须设置仓库。
8. 进入您的仓库钩子页面。例如,
github.com/<username>/<project_name>/admin/hooks

在“可用服务钩子>接收后URL”下,添加“github:github@your-ci-server.com/github-webhook/”。 这里的“github:github”是我们之前创建的用户。 然后我们需要验证Jenkins与Github。转到“管理Jenkins>配置系统”,在GitHub Web Hook下,添加您的Github用户名和密码,并单击“测试凭据”按钮以在Github上进行一次授权。

我已经完成了这个操作,但是当我推送到我的开发分支时没有任何反应。Webhook 设置为 github:github@my-jenkins-install.com:8080/github-webhook/ 。然而,尽管已经勾选了在 GitHub 发生变更时进行构建,但没有进行拉取操作。 - w2bro
@ross.m,所以你已经创建了一个Jenkins用户'github',密码为'github'? - VonC
我已经检查了具有正确权限的用户,这是之前没有的。我需要推送到主分支吗? - w2bro
@ross.m 在 GitHub 上推送 master 分支吗?是的,如果你想让 GitHub 钩子运行并使用用户名 github、密码 github 联系 Jenkins。 - VonC
啊,我在版本控制-->git下缺少了信息。现在钩子已经完美地工作了,谢谢! - w2bro

2

看起来在当前版本的GitHub插件中,已经不需要接受的答案了。您可以在GitHub插件设置下的“配置Jenkins”中检查为/github-webhook授予读取权限,允许在不进行身份验证的情况下调用Webhook。

正如这个选项的帮助中所解释的那样,这是相当安全的,而且实际上也不比使用用户名为“github”,密码为“github”的用户更差。


0

在Jenkins上实现自动构建有两种方法。你选择哪种取决于GitHub是否能够调用你提供的Jenkins服务器URL。如果你正在防火墙后面运行Jenkins,这可能不是情况。

  1. 如果GitHub可以访问该URL,则可以在那里设置存储库的服务钩子
  2. 如果不能,则可以设置Jenkins进行定期轮询

你可以设置两者,但一种解决方案足以使其正常工作。如果可行,我总是选择第一种,因为它可以节省资源CPU和流量。

无论哪种方式,你都需要GitHub插件 for Jenkins

希望这有点帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接