当开发人员向GitHub的master分支提交pull request时,需要相关的人员进行review后,才merge到master分支。通过Jenkins,可以很方便的实现pull request时自动触发构建、测试代码,极大的提高工作效率。下面简单介绍一下配置步骤。
1.生成Token
GitHub上点击个人头像,依次选择Settings > Developer settings > Personal access tokens, 点击Generate new token按钮进入新Token生成页面。
勾选下图所示的选项,然后单击页面下方的Generate token按钮生成Token.
注意:将生成的Token复制保存,后面你就无法再看到它了。
2.安装插件
Jenkins > 系统管理 > 管理插件 > 可选管理,搜索GitHub Pull Request Builder,然后选择直接安装
插件介绍地址 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时需要用到它。
然后再使用GitHub的用户名和密码创建另一个Credentials,后面配置任务的时候会用到。当然如果你已经添加过了,就不用再配置。
然后在 jenkins > 系统管理 > 系统设置 > 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 新建任务
新建一个自由风格的任务,然后配置该任务
将项目的GitHub URL添加到GitHub project处(可以输入到浏览器中的项目,例如https://github.com/janinko/ghprb)
4.2 源码管理
在配置源码管理中添加代码在GitHub中的地址,Credentials处选择上面用GItHub的账号和密码创建的Credentials。
- 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}/
- 如果只想构建PR,请将refspec设置为
- Branch Specifier: 填写
${sha1}
, 如果想要用到提交的pr,则这个地方填写${ghprbActualCommit}
4.3 构建触发器
在构建触发器中添加管理员名单,勾选Use github hooks for build triggering并点击后面的高级按钮,White list中添加针对这个任务允许进行pull request的GitHub用户账号。
4.4 构建步骤
构建这里根据自己的项目情况选择合适的构建工具,我的项目使用Gradle构建的所以选择的是Invoke Gradle script。
如果添加了Set build status to “pending” on GitHub commit这个构建步骤,那么在构建的时候GItHub项目的Pull requests中会显示pending状态。
5. 新建webhook
在GitHub对应的项目远程仓库,Settings > Webhooks中,新建一个webhook, 按下图填写Jenkins地址
选中Let me select individual events,勾选Pull requests选项。
如果GitHub能够正确连接Jenkins,那么Recent Deliveries下面会有一条没有报错的记录。
到此,配置就完成了。下面往项目的master分支发一个pull request测试。发PR后GitHub上显示pending check状态
Jenkins上成功触发了一次构建
当成功构建后,GitHub上面的状态修改成successful check。
6. 常见问题
6.1 构建失败
可以通过上图中构建结果右侧的Details打开Jenkins上对应的任务查看Build History,通过控制台输出
可以看到报错信息,根据信息提示修改配置。
6.2 PR时无法触发Jenkins构建
一般是配置有问题,可以通过看日志信息排查
在GitHub Webhooks的 Manage webhook 页面最下方的Recent Deliveries查看GitHub的错误信息。
Jenkins > 系统管理 > 日志管理, 打开 所有系统日志 查看错误信息