Jenkins 进阶03 Generic Webhook实践 解析GET/POST请求数据

网友投稿 364 2022-09-13

Jenkins 进阶03 Generic Webhook实践 解析GET/POST请求数据

解析GET数据

传参注意,第一个参数使用?号连接, 后面的参数使用&符号连接。

通过触发器给Jenkins传入参数,也就是我在客户端请求Jenkins,然后Jenkins怎么获取到请求当中参数?

Jenkins 配置Generic hook,获取请求参数​​version​​​ 和 ​​username​​ (参数名称要一致))

如果需要看效果,打印日志

解析GET数据

客户端发送Get请求, 带有两个参数​​version​​​ 和​​username​​ 。

触发成功,并且传递了一些变量

{ "jobs": { "Gitlab-Generic-Webhook-Trigger": { "regexpFilterExpression": "", "triggered": true, "resolvedVariables": { "username": "\"lulei\"", "username_0": "\"lulei\"", "version": "1", "version_0": "1" }, "regexpFilterText": "", "id": 501, "url": "queue/item/501/" } }, "message": "Triggered jobs."}

nodeRunning on build-01 in /data/cicd/jenkinsagent/workspace/Gitlab-Generic-Webhook-Trigger[Pipeline] {[Pipeline] stage[Pipeline] { (Hello)[Pipeline] echo1[Pipeline] echo"lulei"[Pipeline] }[Pipeline] // stage[Pipeline] }[Pipeline] // node[Pipeline] End of Pipeline

为了方便调试,可以安装rebuild插件,那么不需要重复触发。点开某次成功的构建,然后rebuilder会使用上次构建的参数再去触发一遍。

上面整个过程就先触发,再捕获,  发get请求-------》Jenkins获取请求参数------》验证

解析HEADER参数数据

客户端发送请求(什么请求都可以,这里的header与请求类型无关), 带有两个参数 header_name 和 header_id 。

curl --location --request GET '\--header 'header_name: jenkins' \--header 'header_id: 100'

Contributing variables: header_id = 100 header_id_0 = 100 header_name = jenkins header_name_0 = jenkins

通过jenkinsfile读取传递的参数

println("${header_id}")println("${header_name}")println(header_id)println(header_name)String headerName = "${header_id}"println(headerName)//pipeline { //}

解析POST数据

$:表示所有的body数据

Jenkins 配置触发器来获取Post参数。

获取所有数据

获取username字段

获取groupname字段

客户端发送POST请求, 参数存储在body体中(参考POSTMAN中的样例)

在使用post请求时候,Jenkins里面定义的变量名字可以与json格式里面的变量名字不同,这个变量名字就相当于在Jenkins里面定义的变量,变量的值使用jsonpath语法。

Contributing variables: allData = { "name": "zhangsan", "group": { "name" : "jenkins" }} allData_group_name = jenkins allData_name = zhangsan groupName = jenkins userName =

curl --location --request POST '\--header 'Content-Type: application/json' \--data-raw '{ "name": "zhangsan", "group": { "name" : "jenkins" }}'

Jenkinsfile中使用参数

println("所有body数据 --> ${allData}")println('最外层name ---> $.name' + "${userName}")println('第二层name ---> $.group1.name' + "${group1Name}")

首先在客户端发起请求,里面包含了数据,Jenkins要想拿到数据和上面两种get,header不一样得使用$符号,$符号代表着整体,通过$.的方式获取里面的值。

扩展流水线解析JSON数据

安装插件: ​​Pipeline Utility Steps​​

现在不想在触发器里面去写这些一个一个的变量了,但是还是想获取变量的值,那么需要插件。

我们会使用到这个插件的resdJSON方法,是用来专门用来处理json数据的。如果不知道怎么使用这个插件可以在片段生成器里面查看,有处理文本和处理json数据,最后赋值给变量。

def webHookData = readJSON text: "${allData}"String name1 = webHookData["name"]String name2 = webHookData.nameString groupName1 = webHookData["group"]["name"]String groupName2 = webHookData.group.namepipeline { agent any stages { stage('webHook') { steps { println("所有body数据 --> ${allData}") println(name1) println(name2) println(groupName1) println(groupName2) } } }}

[Pipeline] readJSON[Pipeline] nodeRunning on build-01 in /data/cicd/jenkinsagent/workspace/Gitlab-Generic-Webhook-Trigger[Pipeline] {[Pipeline] stage[Pipeline] { (webHook)[Pipeline] echo所有body数据 --> { "name": "zhangsan", "group": { "name" : "jenkins" }}[Pipeline] echozhangsan[Pipeline] echozhangsan[Pipeline] echojenkins[Pipeline] echojenkins[Pipeline] }[Pipeline] // stage[Pipeline] }[Pipeline] // node[Pipeline] End of PipelineFinished: SUCCESS

所以有两种方法,一种是在webhook里面将每个参数都写出来,另外一种是使用readJSON去处理。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Jenkins 进阶02 Generic Webhook 实践
下一篇:出海品牌该如何做「品效合一」的内容营销?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~