从Git特性分支推送中触发Jenkins管道用于docker

133 阅读1分钟

在这个例子中,我们要让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:8080http://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中进行以下操作。

  1. 转到 "配置系统 "页面。

  2. 点击 "GitHub "部分的 "高级 "按钮。

  3. 勾选 "Specify another hook url for GitHub configuration "复选框,在某处记下URLhttp://192.168.99.40:8080/github-webhook/ ,然后再次取消勾选。

  4. 退出页面,不要保存。

准备 Github 仓库

转到GitHub仓库,https://github.com/inanzzz/game ,并做以下工作。

  1. 进入 "设置",然后进入 "Webhooks "页面。

  2. http://fdb1ce55.ngrok.io/github-webhook/ 粘贴到 "Payload URL "框。如你所见,我们没有使用本地IP地址。

  3. 在 "你希望哪些事件触发这个Webhook?"部分选择 "只是推送事件 "选项。**注意:**这通常就足够了,但可以选择 "让我选择单个事件",然后勾选 "推送 "和 "拉动请求 "选项。

  4. 点击 "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,按以下步骤添加一个新项目。

  1. 将项目命名为 "game-pr-builder",选择 "管道 "并保存。

  2. 在 "General "标签下,勾选 "GitHub project "选项,并将https://github.com/inanzzz/game

  3. 在 "Build Triggers "标签下,勾选 "GitHub hook trigger for GITScm polling "选项。

  4. 在 "管道 "部分选择 "来自SCM的管道脚本 "选项。

  5. 选择 "Git "作为SCM。

  6. 在 "Repository URL "中使用https://github.com/inanzzz/game

  7. 从 "Credentials "中选择GitHub-inanzzz

  8. */master 改为**/feature/* (或feature/*),因为我们只想让 "特征 "分支为git push 行动而构建。

  9. 在 "脚本路径 "中添加ci/pipeline/branch/feature/Jenkinsfile

  10. 保存并退出。

用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