GitHub pull request时Jenkins自动构建教程


当开发人员向GitHub的master分支提交pull request时,需要相关的人员进行review后,才merge到master分支。通过Jenkins,可以很方便的实现pull request时自动触发构建、测试代码,极大的提高工作效率。下面简单介绍一下配置步骤。

1.生成Token

GitHub上点击个人头像,依次选择Settings > Developer settings > Personal access tokens, 点击Generate new token按钮进入新Token生成页面。 Generate new token

勾选下图所示的选项,然后单击页面下方的Generate token按钮生成Token. Select scopes

注意:将生成的Token复制保存,后面你就无法再看到它了。 Personal access tokens

2.安装插件

Jenkins > 系统管理 > 管理插件 > 可选管理,搜索GitHub Pull Request Builder,然后选择直接安装 Install Plugin

插件介绍地址 https://github.com/jenkinsci/ghprb-plugin/raw/master/README.md

3. 配置GitHub Pull Request Builder

在Jenkins中添加Credentials,Kind处选择Secret text, Secret处填写GitHub的Token,后面配置GitHub Pull Request Builder时需要用到它。 Add Credentials

然后再使用GitHub的用户名和密码创建另一个Credentials,后面配置任务的时候会用到。当然如果你已经添加过了,就不用再配置。 Add Credentials

然后在 jenkins > 系统管理 > 系统设置 > GitHub Pull Request Builder如下配置 Config GitHub Pull Request Builder

GitHub Server API URL: 默认为 https://api.github.com , 企业版填写 https://域名/api/v3/。
Credentials: 选择之前用GitHub生成的token创建的Credentials。

填好上面的内容后,可以通过下方的Connect to API 按钮验证连接GitHub是否正常,Check repo permissions按钮验证权限。

4. 配置任务

4.1 新建任务

新建一个自由风格的任务,然后配置该任务 Create Job

将项目的GitHub URL添加到GitHub project处(可以输入到浏览器中的项目,例如https://github.com/janinko/ghprb) Config GitHub URL

4.2 源码管理

在配置源码管理中添加代码在GitHub中的地址,Credentials处选择上面用GItHub的账号和密码创建的Credentials。 SC Management

  • refspec:
    • 如果只想构建PR,请将refspec设置为+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}
    • 如果你想构建PR和分支,请将refspec设置为 +refs/heads/*:refs/remotes/origin/* +refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/
  • Branch Specifier: 填写 ${sha1}, 如果想要用到提交的pr,则这个地方填写 ${ghprbActualCommit}

4.3 构建触发器

在构建触发器中添加管理员名单,勾选Use github hooks for build triggering并点击后面的高级按钮,White list中添加针对这个任务允许进行pull request的GitHub用户账号。 Build Trigger

4.4 构建步骤

构建这里根据自己的项目情况选择合适的构建工具,我的项目使用Gradle构建的所以选择的是Invoke Gradle script。 Build

如果添加了Set build status to “pending” on GitHub commit这个构建步骤,那么在构建的时候GItHub项目的Pull requests中会显示pending状态。
Build Status

5. 新建webhook

在GitHub对应的项目远程仓库,Settings > Webhooks中,新建一个webhook, 按下图填写Jenkins地址 Add webhooks

选中Let me select individual events,勾选Pull requests选项。 individual events

如果GitHub能够正确连接Jenkins,那么Recent Deliveries下面会有一条没有报错的记录。 Recent Deliveries

到此,配置就完成了。下面往项目的master分支发一个pull request测试。发PR后GitHub上显示pending check状态 pending check

Jenkins上成功触发了一次构建
Jenkins Building

当成功构建后,GitHub上面的状态修改成successful check。 successful check

6. 常见问题

6.1 构建失败

GitHub Build Failed
可以通过上图中构建结果右侧的Details打开Jenkins上对应的任务查看Build History,通过控制台输出可以看到报错信息,根据信息提示修改配置。

Jenkins Build Failed

6.2 PR时无法触发Jenkins构建

一般是配置有问题,可以通过看日志信息排查
在GitHub Webhooks的 Manage webhook 页面最下方的Recent Deliveries查看GitHub的错误信息。 Recent Deliveries

Jenkins > 系统管理 > 日志管理, 打开 所有系统日志 查看错误信息