某些分支push/merge代码后,可以自动触发单元测试、静态代码扫描等。提前预防问题,发现问题,提前解决。
1.下面实现一个场景,当开发将代码merge/push到一个多人协作的merge分支时,即可触发jenkins job执行,其他分支或操作不触发执行。
2.可以通过手动执行触发该jenkins job,且可以指定触发的分支。
Jenkins配置:
- 我们的jenkins job不使用匿名触发,我们可以通过user:token的方式来进行远程触发。
我的账户=》设置API Token,并记录生成的token。

- 添加jenkins插件Generic Webhook Trigger,以便来获取远程触发的参数,并进行过滤。
-
新建工程,勾选插件
image.png
-
设置Post content parameters,接受webhook触发时post参数,可以提取出想要使用的字段,可将content全部打印出来,提取想要的字段。这里我把分支名称提出来,起了个名字叫ref,可直接通过$ref来引用。
image.png
-
设置一个本工程唯一的token,将此token跟随在hookurl后面,这样只有带该token参数的请求才可触发本工程。
image.png
- 可以设置过滤器,如下图,将提取出来的分支名称进行正则匹配,匹配成功可以触发jenkins,不成功无法触发。为避免频繁触发,一定要设置过滤。
此处,将过滤分支名,在开发建立分支规范的时候,可设置固定格式的merge分支,这样只有merge分支才能触发本工程。

- 手动执行本工程,或者通过其他工程触发本工程,需要增加参数,可以在本工程设置参数化执行,比如指定分支,可将分支参数设置为ref,跟远程调用POST参数中提取出来的定义名一样即可,在后续shell等操作中使用,不冲突。
gitlab配置:
- 首先获取到某git工程的admin权限
- 点击settings=》hooks
- 配置Post-Receive WebHooks,设置hookurl为
[http://user:api_token@server/generic-webhook-trigger/invoke?token=testwebhooktoken]即可,在push和merge时均可触发jenkins。
网友评论