Jenkins-[配置作业触发器|解析GET/HEADER/POST请求数据]
目的: 为Jenkins作业添加触发器,便于其他系统调用。
安装配置Generic WebHook
插件名称:
- Generic Webhook Trigger
- rebuild
重启后,进入一个Pipeline项目设置,已经可以选择这个触发器了....
启动Generic Webhook触发器后, 相当于给Jenkins加了一个新的接口(http://JENKINS_URL/generic-webhook-trigger/invoke)。
调用的时候:这里要把 JENKINS_URL
换成自己真实的Jenkins 服务器地址,有端口就加上端口,是域名就写域名。下面是一个参考的URL:
http://192.168.1.110:8080/generic-webhook-trigger/invoke
1.Post content parameters: 获取调用接口传进来的数据
JsonPath语法文档: https://github.com/json-path/JsonPath
$表示整体
$.name:指定变量
2.Header parameters: 获取Header中的参数
value filter一般不用,定义匹配规则的
3.Request parameters: 获取URL中的请求参数
curl http://192.168.1.110:8080/generic-webhook-trigger/invoke?runopts=gitlab
4.Token: 给URL添加一个触发的认证,这个值可以自己定义
get请求的方式
curl http://192.168.1.110:8080/generic-webhook-trigger/invoke?token=devops-service
远程执行
打印调试信息到日志中
- 最下面2个勾上
触发条件过滤:仅满足条件才能触发此作业
实践:demo
解析GET/HEADER/POST请求数据
传参注意,第一个参数使用?号连接, 后面的参数使用&符号连接。
?token=demo-pipeline-service&user=jenkins&a=1&b=2
演示将postman中的请求转换curl方式。
[root@zeyang-nuc-service ~]# curl --location --request GET 'http://192.168.1.110:8080/generic-webhook-trigger/invoke?token=demo-pipeline-service' {"jobs":{"demo-pipeline-service":{"regexpFilterExpression":"","triggered":true,"resolvedVariables":{},"regexpFilterText":"","id":209,"url":"queue/item/209/"}},"message":"Triggered jobs."}[root@zeyang-nuc-service ~]#
解析GET数据
- 户端发送Get请求, 带有两个参数
version
和username
。
http://192.168.1.110:8080/generic-webhook-trigger/invoke?token=demo-pipeline-service&version=1.1.1&username=jenkins
- enkins 配置Generic hook,获取请求参数
version
和username
(参数名称要一致)
- 验证测试(Jenkins日志中能够打印出获取的值,则正常)
- 通过jenkinsfile读取传递的参数
println("${username}") println("${version}")
解析HEADER参数数据
- 客户端发送请求(什么请求都可以,这里的header与请求类型无关), 带有两个参数 header_name 和 header_id 。
curl --location --request GET 'http://192.168.1.110:8080/generic-webhook-trigger/invoke?token=demo-pipeline-service' \ --header 'header_name: jenkins' \ --header 'header_id: 100'
- Jenkins 配置Generic hook,获取请求参数
header_name
和header_id
。
- 通过jenkinsfile读取传递的参数
println("${header_id}") println("${header_name}") println(header_id) println(header_name) String headerName = "${header_id}" println(headerName) //pipeline { //}
解析POST数据
- 客户端发送POST请求, 参数存储在body体中(参考POSTMAN中的样例)
curl --location --request POST 'http://192.168.1.110:8080/generic-webhook-trigger/invoke?token=demo-pipeline-service' \ --header 'Content-Type: application/json' \ --data-raw '{ "name": "zhangsan", "id": "123", "group1": { "name": "jenkins", "id" : "001", "age": "40" } }'
- Jenkins 配置触发器来获取Post参数。
获取所有数据
获取username字段
获取group1Name字段
- Jenkinsfile中使用参数
println("所有body数据 --> ${allData}") println('最外层name ---> $.name' + "${userName}") println('第二层name ---> $.group1.name' + "${group1Name}")
继续阅读

我的微信
这是我的微信扫一扫
评论