在这个例子中,我们要让GitHub在我们推送代码到GitHub仓库的feature 分支时才触发Jenkins流水线构建。这就是全部
前提条件
应用 "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?"部分选择 "只是推送事件 "选项。**注意:**这通常就足够了,但可以选择 "让我选择单个事件",然后勾选 "推送 "和 "拉动请求 "选项。
-
点击 "Add 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-builder",选择 "管道 "并保存。
-
在 "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改为**/feature/*(或feature/*),因为我们只想让 "特征 "分支为git push行动而构建。 -
在 "脚本路径 "中添加
ci/pipeline/branch/feature/Jenkinsfile。 -
保存并退出。
用git推送事件测试
$ git status
你的Jenkins日志应该打印以下几行。
Feb 16, 2019 9:22:47 PM org.jenkinsci.plugins.github.webhook.subscriber.DefaultPushGHEventSubscriber onEvent
文件
ci/pipeline/branch/feature/Jenkinsfile
pipeline {
docker/ci/Makefile
CONTAINER := game_php