后面离不开API,这个url就可以理解为是api的接口,通过给api接口传参。
传参有两种方式,一种是放在header里面,也就是请求头里面,或者请求体里面。一种是放在url里面。
构建触发器就可以理解为Jenkins为我们暴露的api,然后调用api传递好参数就能够触发这个作业正常去运行。
jenkins系统是需要认证的,这里涉及到api认证的一个问题。
http://192.168.11.128:8080/job/Test/job/webhook-01/api/json
这里的认证方式比较多,常用使用的是token和其他系统做集成或者使用用户名密码的方式。
这里输入用户名和密码就行了,下面api给我们返回了json数据,最后就是对json数据的处理了。(请求接口,返回数据,对数据做处理)
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)之间的正确通信。
一个请求和响应的过程:
- Request 用户通过浏览器向我们的服务端发起请求。
- Response服务端将客户端请求的资源数据进行响应。
调用接口的方法
请求类型:
- GET 向指定的URL请求资源,可携带参数(明文)。
- POST 向指定的URL提交资源,表单数据提交,数据进行封装(比Get方法安全)。
- PUT 与POST类似,通常用于对资源数据的更新修改。
- DELETE 删除指定的资源。
演示:以baidu为例,用Postman调用一个接口的过程。并结合使用Curl操作。
HTTP常见的错误码
- 1xx : 服务已收到请求,请求者继续执行操作。
- 2xx:请求成功,常见(201)
- 3xx:请求成功,页面发生重定向(301)
4xx:客户端发生了错误
- 常见的是资源找不到了(404)
- 资源请求需要认证认证失败(401)(有些时候需要登入,那么就要传入认证信息,认证信息也就是账号和密码,出现401说明认证有问题,说明账号密码有问题)(下面是密码写错了)
- 认证成功但是权限不够(403)
5xx: 服务端发生了错误(客户端请求的参数都是正确的,但是服务端在解析处理的时候发生了错误)
- 网关超时(504)
- 内部错误(500)
- 网关错误(502)
- 服务不可用(503)
gitlab ci是和gitlab有深度集成的,有天然的优势,提交流水线要比Jenkins轻松很多很多的。
Jenkins Generic Webhook实践
目的: 为Jenkins作业添加触发器,便于其他系统调用。(比如在Gitlab里面做个某个动作去触发Jenkins作业去运行,这个插件是通用的,一般不管是gitlab或者其他系统想要触发Jenkins的话那么就使用这个插件)非常灵活,代价就是需要我们去配置。
安装配置Generic WebHook
插件名称:Generic Webhook Trigger
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项目设置,已经可以选择这个触发器了....
插件文档:Generic Webhook Trigger | Jenkins plugin
可以看到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
http://139.198.170.122:8080/generic-webhook-trigger/invoke?token=generic-webhook-trigger
{"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作业配置触发器 认证触发
A Authorization: Bearer header Authorization: Bearer TOKEN_HERE 写到认证
如果要转化为代码的方式,可以使用
#可以看到响应,这样也可以触发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作业的方式