c语言sscanf函数的用法是什么
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~