当前位置: 代码迷 >> 综合 >> Jenkins 进阶02 Generic Webhook 实践
  详细解决方案

Jenkins 进阶02 Generic Webhook 实践

热度:33   发布时间:2023-09-30 13:04:11.0

Jenkins 进阶02 Generic Webhook 实践

后面离不开API,这个url就可以理解为是api的接口,通过给api接口传参。

传参有两种方式,一种是放在header里面,也就是请求头里面,或者请求体里面。一种是放在url里面。

构建触发器就可以理解为Jenkins为我们暴露的api,然后调用api传递好参数就能够触发这个作业正常去运行。

Jenkins 进阶02 Generic Webhook 实践

jenkins系统是需要认证的,这里涉及到api认证的一个问题。

http://192.168.11.128:8080/job/Test/job/webhook-01/api/json

Jenkins 进阶02 Generic Webhook 实践

Jenkins 进阶02 Generic Webhook 实践

这里的认证方式比较多,常用使用的是token和其他系统做集成或者使用用户名密码的方式。

这里输入用户名和密码就行了,下面api给我们返回了json数据,最后就是对json数据的处理了。(请求接口,返回数据,对数据做处理)

Jenkins 进阶02 Generic Webhook 实践

Jenkins 进阶02 Generic Webhook 实践

curl --location --request GET 'http://192.168.11.128:8080/job/Test/job/webhook-01/api/json' \
--header 'Authorization: Basic YWRtaW46MTIzNDU2' \
--header 'Cookie: JSESSIONID=28F015FBF3615879D9419987A62432D7'

预备知识


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

Web HTTP基础知识


HTTP请求是什么?

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

一个请求和响应的过程:

Jenkins 进阶02 Generic Webhook 实践

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

调用接口的方法

请求类型:

  • GET 向指定的URL请求资源,可携带参数(明文)
  • POST 向指定的URL提交资源,表单数据提交,数据进行封装(比Get方法安全)。
  • PUT 与POST类似,通常用于对资源数据的更新修改。
  • DELETE 删除指定的资源。

演示:以baidu为例,用Postman调用一个接口的过程。并结合使用Curl操作。

Jenkins 进阶02 Generic Webhook 实践

HTTP常见的错误码


  • 1xx : 服务已收到请求,请求者继续执行操作。
  • 2xx:请求成功,常见(201)
  • 3xx:请求成功,页面发生重定向(301)

4xx:客户端发生了错误

  • 常见的是资源找不到了(404)
  • 资源请求需要认证认证失败(401)(有些时候需要登入,那么就要传入认证信息,认证信息也就是账号和密码,出现401说明认证有问题,说明账号密码有问题)(下面是密码写错了)

    Jenkins 进阶02 Generic Webhook 实践

  • 认证成功但是权限不够(403)

5xx: 服务端发生了错误(客户端请求的参数都是正确的,但是服务端在解析处理的时候发生了错误)

  • 网关超时(504)
  • 内部错误(500)
  • 网关错误(502)
  • 服务不可用(503)

gitlab ci是和gitlab有深度集成的,有天然的优势,提交流水线要比Jenkins轻松很多很多的。

Jenkins Generic Webhook实践


目的: 为Jenkins作业添加触发器,便于其他系统调用。(比如在Gitlab里面做个某个动作去触发Jenkins作业去运行,这个插件是通用的,一般不管是gitlab或者其他系统想要触发Jenkins的话那么就使用这个插件)非常灵活,代价就是需要我们去配置。

安装配置Generic WebHook

插件名称:Generic Webhook Trigger

Jenkins 进阶02 Generic Webhook 实践

Can receive any HTTP request, extract any values from JSON or XML and trigger a job with those values available as variables. Works with GitHub, GitLab, Bitbucket, Jira and many more. 

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

Jenkins 进阶02 Generic Webhook 实践

插件文档:Generic Webhook Trigger | Jenkins plugin

Jenkins 进阶02 Generic Webhook 实践

Jenkins 进阶02 Generic Webhook 实践

可以看到Jenkins的触发地址,调用这个接口就触发了这个作业。

现在每个流水线都开启了webhook,那么怎么确认触发哪个作业呢

Is triggered by HTTP requests to http://JENKINS_URL/generic-webhook-trigger/invoke

如果A,B两条流水线都开启了,那么想触发A,这个时候可以为其添加token,通过token的值去触发,要是多个项目使用一个token,那么这些流水线都会触发。

 这里有三种方式填入token

  • Query parameter /invoke?token=TOKEN_HERE   参数
  • A token header token: TOKEN_HERE  写入header
  • A Authorization: Bearer header Authorization: Bearer TOKEN_HERE 写到认证

http://139.198.170.122:8080/generic-webhook-trigger/invoke?token=webhook

上面一句话概括如下:

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

Jenkins作业配置触发器 通过参数触发


Query parameter /invoke?token=TOKEN_HERE   参数 

Jenkins 进阶02 Generic Webhook 实践

使用插件就生成了这样一个接口,通过这个接口就可以去触发Jenkins 

http://139.198.170.122:8080/generic-webhook-trigger/invoke?token=generic-webhook-trigger

Jenkins 进阶02 Generic Webhook 实践

Jenkins 进阶02 Generic Webhook 实践

{"jobs": {"Gitlab-Generic-Webhook-Trigger": {"regexpFilterExpression": "","triggered": true,     #这里为true说明触发了"resolvedVariables": {},"regexpFilterText": "","id": 493,"url": "queue/item/493/"}},"message": "Triggered jobs."
}

 如果要传入第二个参数,第一个参数是跟在?号后面,第二个参数会用&符号

http://139.198.170.122:8080/generic-webhook-trigger/invoke?token=generic-webhook-trigger&user=lulei

Jenkins作业配置触发器 加入header触发


也是设置一个key:value

A token header token: TOKEN_HERE  写入header

Jenkins 进阶02 Generic Webhook 实践

Jenkins作业配置触发器 认证触发


A Authorization: Bearer header Authorization: Bearer TOKEN_HERE 写到认证

Jenkins 进阶02 Generic Webhook 实践

如果要转化为代码的方式,可以使用

Jenkins 进阶02 Generic Webhook 实践

#可以看到响应,这样也可以触发jenkins流水
[root@jenkins-master ~]# curl --location --request GET 'http://139.198.170.122:8080/generic-webhook-trigger/invoke' \
> --header 'Authorization: Bearer generic-webhook-trigger'{"jobs":{"Gitlab-Generic-Webhook-Trigger":{"regexpFilterExpression":"","triggered":true,"resolvedVariables":{},"regexpFilterText":"","id":499,"url":"queue/item/499/"}},"message":"Triggered jobs."}

上面是三种关于触发Jenkins作业的方式

  相关解决方案