需求
- gitlab代码push之后,自动触发jenkins任务
- 后端自动化脚本根据gitlab中变更的brach执行对应的任务
实验介绍
实验内容
其实将上面的需求转换成jenkins的表述就是:jenkins自动脚本中要抓出gitlab中变更代码的分支
传统方法
- 参数化构建,好像获取branch失败
- 使用jenkins的Build when a change is pushed to GitLab,获取branch还是失败
generic-webhook-trigger插件方法
- 介绍:
- 此插件能从gitlab的post body中获取相关参数(变量)
实验步骤
jenkins安装generic-webhook-trigger插件
略
gitlab中创建项目及devops分支
略
配置jenkins的job
-
构建触发器
- Variable,后面自动化可以使用的变量
- Expression,从gitlab的post body中匹配表达式
- Value filter:参数过滤正则表达式
- Default value:默认值
- 注意:这里用了两个变量,一个是ref,可以抓取gitlab中发生变更代码的分支,$.project.name获取项目名称
- Optional filter:选项过滤器,是用来过滤项目和分支的,只有对应的项目名和分支都满足才能触发此jenkins任务。因为这个插件触发的url是一个固定的url,当jenkins的多个job有相同名称的branch时,都会触发,这个在生产环境要注意。Text中对个变量间用“_”分割
-
构建
#!/bin/bash source /etc/profile echo "$ref" echo "$project"
-
上面的截图中有一句:
Is triggered by HTTP requests to http://JENKINS_URL/generic-webhook-trigger/invoke
-
gitlab中配置
- 以master的身份登录
- settings–>Integrations–>URL:
http://admin:xxxxxxxxxxx@10.0.0.1:8080/generic-webhook-trigger/invoke
- 其中admin是jenkins的账号
- xxxxxxxxxxx是jenkins中admin的访问token
验证
gitlab的代码仓库devops分支提交代码,自动触发jenkins的构建:
refs/heads/devops
generic
参考:
- https://wiki.jenkins.io/display/JENKINS/Generic+Webhook+Trigger+Plugin
- https://docs.gitlab.com/ee/user/project/integrations/webhooks.html
- https://github.com/jenkinsci/generic-webhook-trigger-plugin/blob/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd/gitlab/gitlab-push.feature
- https://blog.csdn.net/xlgen157387/article/details/72852428