在这个例子中,我们要让GitHub只在我们将代码合并到GitHub仓库的develop 分支时才触发Jenkins管道构建。当 "feature/hotfix/release "分支被合并到 "develop "时,这个动作经常发生。这就是全部
前提条件
应用 "Jenkins server GitHub SSH integration "和 "Allow Jenkins user to execute docker commands "部分定义的步骤,在整合Jenkins和GitHub中运行dockerised应用程序管道。
Ngrok设置
下载ngrok到主机操作系统的桌面,并在终端运行$ ./ngrok http -host-header=rewrite 192.168.99.40:8080 。http://192.168.99.40:8080 是你的Jenkins GUI地址。这将给你一个可以从互联网上访问的URL。我们以后会用它来与GitHub集成。假设它给我们的URL是http://fdb1ce55.ngrok.io 。
GitHub集成插件
在Jenkins的 "Manage Plugins "页面找到并安装 "GitHub Integration Plugin "插件。
GitHub webhook URL
在Jenkins GUI中进行以下操作。
-
转到 "配置系统 "页面。
-
点击 "GitHub "部分的 "高级 "按钮。
-
勾选 "Specify another hook url for GitHub configuration "复选框,在某处记下URL
http://192.168.99.40:8080/github-webhook/,然后再次取消勾选。 -
退出页面,不要保存。
准备 Github 仓库
转到GitHub仓库,https://github.com/inanzzz/game ,并做以下工作。
-
进入 "设置",然后进入 "Webhooks "页面。
-
将
http://fdb1ce55.ngrok.io/github-webhook/粘贴到 "Payload URL "框。如你所见,我们没有使用本地的IP地址。 -
在 "你希望哪些事件触发这个webhook?"部分选择 "让我选择单个事件",然后勾选 "拉动请求 "选项。
-
点击 "添加webhook "按钮。
如果你在/var/log/jenkins/jenkins.log 文件中回放Jenkins日志,你应该在底部看到下面一行。
Feb 16, 2019 5:59:32 PM org.jenkinsci.plugins.github.webhook.subscriber.PingGHEventSubscriber onEvent
另外,如果你在GitHub页面检查webhook的细节,你会看到GitHub和Jenkins之间的通信信息。它可以在添加的webhook的 "Recent Deliveries "部分找到。
创建Jenkins项目
进入Jenkins,按以下步骤添加一个新项目。
-
将项目命名为 "game-pr-merger",选择 "Pipeline "并保存它。
-
在 "General "标签下,勾选 "GitHub project "选项,并在方框中粘贴
https://github.com/inanzzz/game。 -
在 "Build Triggers "标签下,勾选 "GitHub hook trigger for GITScm polling "选项。
-
在 "管道 "部分选择 "来自SCM的管道脚本 "选项。
-
选择 "Git "作为SCM。
-
在 "Repository URL "中使用
https://github.com/inanzzz/game。 -
从 "Credentials "中选择
GitHub-inanzzz。 -
将
*/master改为develop,因为我们只想让 "开发 "分支为git merge行动进行构建。 -
在 "脚本路径 "中添加
ci/pipeline/branch/develop/Jenkinsfile。 -
保存并退出。
用git merge事件测试
在GutHub仓库创建一个PR,点击 "Merge pull request "按钮进行合并。
你的Jenkins日志应该打印以下几行。
Feb 16, 2019 9:22:47 PM org.jenkinsci.plugins.github.webhook.subscriber.DefaultPushGHEventSubscriber onEvent
文件
ci/pipeline/branch/develop/Jenkinsfile
pipeline {
docker/ci/Makefile
PHP_SERVICE := game_php