jenkins配置gitlab通过sonar扫描结果是否同意merge request

756 阅读2分钟

总共分成几步:

  1. gitlab提交merge request后,会向jenkins发送通知
  2. jenkins得到通知后,会自动构建,此时gitlab中需要等待jenkins的返回结果(实际上是触发external pipline)
  3. jenkins拿到sonar的扫描结果
  4. jenkins向gitlib通知构建结果

第一步中需要gitlab中增加webhook,到jenkins的

第二步中jenkins中添加gitlab的可通信用户

第三步中需要配置sonar到jenkins的webhook

头部参考

sonar配置

image.png

创建网络调用

  1. 名称无限制

  2. URL填写jenkins地址/soanrqube-webhook/

image.png

jenkins配置

系统配置

此处配置的gitlab api token为gitlab提交merge request后,需要启动external pipline的用户 为控制权限和区分,建议单独维护此用户

image.png

Gitlab Merge Request Builder

安装和配置Gitlab Merge Request Builder插件

image.png

源码管理

此处需要注意的是:指定分支填写 ${gitlabSourceBranch},这样才会去扫描merge request中的源分支代码参考

image.png

构建触发器

此处需要注意的是:

  1. 如果只想在merge的时候进行扫描,仅勾选Opened Merge Request Events
  2. 记录GitLab webhook URL,后续在配置gitlab中会使用到
  3. “高级”选项中可以生成Secret token,后续在配置gitlab中也会使用到

image.png

构建

此处需要注意的是:

扫描配置中需要增加:sonar.qualitygate.wait=true

此处和头部参考文档中不同的点,参考文档中再构建后操作中使用了Quality Gates Sonarqube Plugin,
但是在实际jenkins构建中,会报错org.quality.gates.jenkins.plugin.QGException: Expected status 200, got: 400. Response: {"errors":[{"msg":"The \u0027component\u0027 parameter is missing"}]}
找了很多解决方法,最终选择在配置中增加

image.png

image.png

构建后操作

将jenkins构建结果回显到gitlab中

image.png

gitlab配置

image.png

这步设置成private也没有问题

image.png

实际效果

gitlab发起merge request时,就会触发jenkins自动扫描:

image.png

扫描时报后,会拒绝合并

image.png