目 录CONTENT

文章目录

jenkins通过Generic Webhook Trigger插件实现自动构建。

Seven
2023-03-06 / 0 评论 / 0 点赞 / 583 阅读 / 7796 字 / 正在检测是否收录...

之前项目因为代码安全方面,在构建方面都是有专人进行维护,自动构建这块都没有进行实际操作,最近项目有涉及到自动开服务等流程,所以就研究了一下。Generic Webhook Trigger这个插件,用来实现自动化构建,传参数到shell脚本,还是很方便的。

Generic Webhook Trigger插件

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

安装配置Generic WebHook

image-1678069194440
重启后,进入一个Pipeline项目设置,已经可以选择这个触发器了
image-1678069317404
可以看到Jenkins的触发地址,调用这个接口就触发了这个作业。
image-1678069407310
现在每个流水线都开启了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 参数

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

http://172.17.224.25:9900/generic-webhook-trigger/invoke?token=generic-webhook-trigger

当然,你也可以用证书密钥的方式去生成TOKEN,效果都是一样的。
image-1678070119448

然后你可以在浏览器,或者是POSTMAN等软件去访问这个接口。
image-1678070410811
这里只要是TURE说明已经触发成功了。(我这个URL是带了参数,我们后面再详解)
回到JENKINS查看,已经构建结束了。
image-1678070558013

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

也是设置一个key:value

A token header token: TOKEN_HERE 写入header
image-1678073096431

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

A Authorization: Bearer header Authorization: Bearer TOKEN_HERE 写到认证
image-1678073141395
如果要转化为代码的方式,可以使用
image-1678073168601
#可以看到响应,这样也可以触发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插件配置处。
image-1678071166580

传参规则(Generic Webhook Trigger插件默认接收JSON格式数据):

  1. 初始接口URL(此时无法触发构建,因为不带TOKEN)
http://172.17.224.25:9900/generic-webhook-trigger/invoke
  1. 第一个参数TOKEN,使用"?"连接
http://172.17.224.25:9900/generic-webhook-trigger/invoke?token=TOKEN_HERE
  1. 第二个参数serverip,在token后使用"&"连接:
http://172.17.224.25:9900/generic-webhook-trigger/invoke?token=TOKEN_HERE&serverip=123.123.123.123
  1. 第三个参数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

都是可以的,只是顺序不一样。
进行测试:
image-1678072099036

在Generic Webhook Trigger插件配置处可以打印传入的参数。
image-1678072172700
在jenkins构建处查看:
image-1678072296696
在流水线里面直接调用传入的参数:

    stage('package') {
        steps { 
            
            sh 'echo ${Districtservice}' 
            sh 'echo ${serverip}' 
        }
    } 

效果:
image-1678072523932
后续可以直接将参数传入到自己的SHELL脚本等……如:

stage('package && dockerbuild') 
        {
            steps{
                sh '/data/jenkins/shell/backend.sh ${WORKSPACE} ${Districtservice} ${serverip}' 
            }
        }

后续

传参也可以传入列表,等多种类型,大家可以去研究一下。

0

评论区