栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 网络技术 > 网络管理

玩转触发器之Jenkins Generic Webhook使用技巧

网络管理 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力



1. 预备知识

目标:学习HTTP基础知识,掌握如何使用Postman和Curl调用接口的方法。

1.1 Web HTTP基础知识 HTTP请求是什么?

HTTP超文本传输协议,是确保服务器(Server)和客户端(Client)之间的正确通信。

一个请求和响应的过程:



Request用户通过浏览器向服务端发起请求。Response服务端将客户端请求的资源数据进行响应。

HTTP常见的错误码

1xx : 服务已收到请求,请求者继续执行操作。

2xx:请求成功,常见(201)

3xx:请求成功,页面发生重定向(301)

4xx:客户端发生了错误

  • 常见的是资源找不到了(404)
  • 资源请求需要认证认证失败(401)
  • 认证成功但是权限不够(403)

5xx:服务端发生了错误

  • 网关超时(504)
  • 内部错误(500)
  • 网关错误(502)
  • 服务不可用(503)
2. Jenkins Generic Webhook实践

目的:为Jenkins作业添加触发器,便于其他系统调用。

安装配置Generic WebHook

插件名称:Generic Webhook Trigger



重启后,进入一个Pipeline项目设置,已经可以选择这个触发器了....



插件文档:https://plugins.jenkins.io/generic-webhook-trigger/




Jenkins作业配置触发器

启动Generic Webhook触发器后, 相当于给Jenkins加了一个新的接口(http://JENKINS_URL/generic-webhook-trigger/invoke)。



调用的时候:这里要把 JENKINS_URL 换成自己真实的Jenkins 服务器地址,有端口就加上端口,是域名就写域名。下面是一个参考的URL:

http://192.168.1.200:8080/generic-webhook-trigger/invoke 

Post content parameters:获取调用接口传进来的数据

JsonPath语法文档:https://github.com/json-path/JsonPath



Header parameters:获取Header中的参数





Request parameters:获取URL中的请求参数

curl http://192.168.1.200:8080/generic-webhook-trigger/invoke?runopts=gitlab 



Token: 给URL添加一个触发的认证

curl http://192.168.1.200:8080/generic-webhook-trigger/invoke?token=devops-service 



打印调试信息到日志中



触发条件过滤:仅满足条件才能触发此作业



实践:demo



解析GET/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.200: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.200:8080/generic-webhook-trigger/invoke?token=demo-pipeline-service&version=1.1.1&username=jenkins 

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



    验证测试(Jenkins日志中能够打印出获取的值,则正常)



    通过jenkinsfile读取传递的参数

    println("${username}") 
  • println("${version}") 
  • 解析HEADER参数数据

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

    curl --location --request GET 'http://192.168.1.200: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.200: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}") 
  • 扩展流水线解析JSON数据

    安装插件:Pipeline Utility Steps



    readJSON:处理json数据

    println("所有body数据 --> ${allData}") 
  •  def webHookData = readJSON  text: "${allData}" 
  •  String userName = webHookData["name"] 
  • String userName2 = webHookData.name  
  • String group1Name = webHookData["group1"]["name"] String group1Name2 = webHookData.group1.name 
  •  println('最外层name ---> $.name' + "${userName}") 
  • println('最外层name ---> $.name' + "${userName2}")  
  • println('第二层name ---> $.group1.name' + "${group1Name}") println('第二层name ---> $.group1.name' + "${group1Name2}") 
  • Rebuilder 插件使用

    可以直接携带原触发参数进行触发,不用重复触发(不用在重复的提交代码了)。



    进入某一次构建后,可以点击rebuild。



     

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/823741.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号