之前项目因为代码安全方面,在构建方面都是有专人进行维护,自动构建这块都没有进行实际操作,最近项目有涉及到自动开服务等流程,所以就研究了一下。Generic Webhook Trigger这个插件,用来实现自动化构建,传参数到shell脚本,还是很方便的。
Generic Webhook Trigger插件
首先:官方文档
为Jenkins作业添加触发器,便于其他系统调用。(比如在Gitlab里面做个某个动作去触发Jenkins作业去运行,这个插件是通用的,一般不管是gitlab或者其他系统想要触发Jenkins的话那么就使用这个插件)非常灵活,代价就是需要我们去配置。
安装配置Generic WebHook
重启后,进入一个Pipeline项目设置,已经可以选择这个触发器了
可以看到Jenkins的触发地址,调用这个接口就触发了这个作业。
现在每个流水线都开启了webhook,那么怎么确认触发哪个作业呢?
如果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 写到认证
上面一句话概括如下:
Jenkins作业配置触发器: 启动Generic Webhook触发器后, 相当于给Jenkins加了一个新的接口(http://JENKINS_URL/generic-webhook-trigger/invoke)。
调用的时候:这里要把 JENKINS_URL 换成自己真实的Jenkins 服务器地址,有端口就加上端口,是域名就写域名。下面是一个参考的URL:
http://172.17.224.25:9900/generic-webhook-trigger/invoke
Jenkins作业配置触发器 通过TOKEN触发
Query parameter /invoke?token=TOKEN_HERE 参数
使用插件就生成了这样一个接口,通过这个接口就可以去触发Jenkins
http://172.17.224.25:9900/generic-webhook-trigger/invoke?token=generic-webhook-trigger
当然,你也可以用证书密钥的方式去生成TOKEN,效果都是一样的。
然后你可以在浏览器,或者是POSTMAN等软件去访问这个接口。
这里只要是TURE说明已经触发成功了。(我这个URL是带了参数,我们后面再详解)
回到JENKINS查看,已经构建结束了。
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作业的方式
传参数进流水线使流水线调用。
首先配置接收的参数:
回到jenkins->Generic Webhook Trigger插件配置处。
传参规则(Generic Webhook Trigger插件默认接收JSON格式数据):
- 初始接口URL(此时无法触发构建,因为不带TOKEN)
http://172.17.224.25:9900/generic-webhook-trigger/invoke
- 第一个参数TOKEN,使用"?"连接
http://172.17.224.25:9900/generic-webhook-trigger/invoke?token=TOKEN_HERE
- 第二个参数serverip,在token后使用"&"连接:
http://172.17.224.25:9900/generic-webhook-trigger/invoke?token=TOKEN_HERE&serverip=123.123.123.123
- 第三个参数Districtservice,和第二个参数一样使用"&"连接(以此类推):
http://172.17.224.25:9900/generic-webhook-trigger/invoke?token=TOKEN_HERE&serverip=123.123.123.123&Districtservice=19
除了TOKEN必须在第一个,后面的参数只要名称一至,可以不分先后。比如
http://172.17.224.25:9900/generic-webhook-trigger/invoke?token=TOKEN_HERE&serverip=123.123.123.123&Districtservice=8 http://172.17.224.25:9900/generic-webhook-trigger/invoke?token=TOKEN_HERE&Districtservice=8&serverip=123.123.123.123
都是可以的,只是顺序不一样。
进行测试:
在Generic Webhook Trigger插件配置处可以打印传入的参数。
在jenkins构建处查看:
在流水线里面直接调用传入的参数:
stage('package') {
steps {
sh 'echo ${Districtservice}'
sh 'echo ${serverip}'
}
}
效果:
后续可以直接将参数传入到自己的SHELL脚本等……如:
stage('package && dockerbuild')
{
steps{
sh '/data/jenkins/shell/backend.sh ${WORKSPACE} ${Districtservice} ${serverip}'
}
}
后续
传参也可以传入列表,等多种类型,大家可以去研究一下。
评论区