通过 generic-webhook-trigger 插件实时获取 Bitbucket Repository Events
背景
本篇讨论如何通过 Jenkins generic webhook trigger 插件来获取 Git 仓库事件(Events)。比如获取仓库的 Pull Request ID 等。
使用过 Jenkins Multi-branch pipeline Job 的用户知道,这个 Job 类型的环境变量中可以得到 Pull Request 的相关信息如下
Multi-branch pipeline Job 环境变量
为了获取这个变量需要创建这种类型的 Job,并且可能需要 clone 该仓库的代码,有点杀鸡宰牛的意思,看起来并不是一个特别恰当的办法。
如何通过创建一个普通的 Jenkins Job 就能实时获取 Bitbucket 仓库以及 Pull Request 事件呢?通过以下功能和插件可以实现。
- 配置 Bitucket 的 Webhook
- 通过 Jenkins generic-webhook-trigger 插件接收 Webhook 的 Event 事件
实现步骤
设置 Bitbucket Webhook
在需要监听的 Bitbucket 仓库中创建一个 webhook,如下:
- Name:
test-demo
URL:http://JENKINS_URL/generic-webhook-trigger/invoke?token=test-demo
创建一个 webhook
备注:Bitbucket 中还有一个另外一个设置项,根据我的测试,该设置项 Post Webhooks 与上面的 Webhooks 都能实现本文要实现的功能。
2. 配置 Jenkins Job
配置 Jenkins: 获取 Pull Request ID
想获取其他 Event 信息,比如 PR title, commit 等,请参考这个链接并按照上面的设置即可。
bitbucket-server-pull-request.feature https://github.com/jenkinsci/generic-webhook-trigger-plugin/blob/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd/bitbucket-server/bitbucket-server-pull-request.feature
配置 Jenkins: token
这里的 token 值 test-demo
可以任意起名,但要与 Bitbucket event URL 中的 token 保持一致。
测试
- 在 Jenkins Job pipeline 里添加了这个代码片段
echo pr_id is ${pr_id}
用来检查输出 Pull Request ID 是否如预期。 - 然后在配置好的 Bitbucket 仓库下面创建一个 Pull Request
- Jenkins Job 被 Pull Request Open 事件自动触发并执行了
Jenkins 通过事件别自动执行
- 通过 Jenkins 的输出日志看到成功获取到了这个 Pull Request ID 值
取到了 Pull Request ID
使用扩展
假如你有个程序,可以通过传入的 Pull Request ID 并借助 Bitbucket REST API 来获取并分析指定 Pull Request 的内容的。比如获取相关文件的历史记录,从而知道这些文件谁修改的最多以及这次修改涉及到了哪些 Jira 单号,从而做一些 Review 或是执行回归测试的推荐等等。
有了这个 PR ID 就可以通过 Jenkins 来自动触发去执行你程序了。
以上的这种方法适合不想或是不知道如何监听 Git 服务器(Bitbucket、GitHub 或是 GitLab 等)事件而需要要单独创建一个服务而准备的。如果你有什么很好的实践,期待你的留言分享。
- 报警系统QuickAlarm之默认报警规则扩展
- PHP 面试知识梳理
- 报警系统QuickAlarm使用手册
- OpenDaylight Carbon二次开发实用指南
- 报警系统QuickAlarm之频率统计及接口封装
- 如何使用Sentry管理Hive外部表权限
- 报警系统QuickAlarm之报警规则解析
- 报警系统QuickAlarm之报警规则的设定与加载
- 报警系统QuickAlarm之报警执行器的设计与实现
- 如何在Kerberos与非Kerberos的CDH集群BDR不可用时复制数据
- 一个可扩展的报警系统Quick-Alarm
- 如何借助GitHub搭建属于自己的maven仓库
- Java可以如何实现文件变动的监听
- 如何在CDH中安装Kudu&Spark2&Kafka
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Github 与 Git,新手初次接触的尴尬历程
- vue-cli3配置路径别名
- 【自动化测试】【Jest-Selenium】(02)—— Jest 匹配器
- 【自动化测试】【Jest-Selenium】(03)—— Jest 异步测试
- 【自动化测试】【Jest-Selenium】(04)—— Selenium WebDriver
- 前端开发"模块打包器"webpack4实战入门
- shadow dom一个最简单的例子
- 程序员必读:Git提交信息和分支创建规范
- 使用brew cask安装minikube的各种错误和解决方法
- 编写高质量可维护的代码:一目了然的注释
- SAP Hybris - how to find corresponding cronjob for a given import
- Linux与Windows间文件互传之TFTP方式
- 假设检验在数据分析中的应用
- 【前端开发】文本阴影:如何使用text-shadow实现首字线索引效果?
- 9.25【前端开发】超链接伪类:如何在svg元素上使用超链接伪类?