在持续集成过程中,针对代码的静态检查一般有两个时间点:一是提交代码的时候、二是提交merge request的时候,如果代码检查不通过,则可以直接拒绝此次代码提交或者合并。下面我们介绍下在常见的devops工具链sonarqube、jenkins和gitlab下,实现在merge request提交的时候进行代码检查的方法。

jenkins端的配置

首先,我们在jenkins中安装如下几个插件:

  • gitlab plugin: https://wiki.jenkins-ci.org/display/JENKINS/GitLab+Plugin。此插件的主要作用是与gitlab集成,可以在代码提交、merge request创建等情况下触发jenkins进行构建,简单讲,就是在gitlab的webhook下触发jenkins构建
  • sonarqube scanner for jenkins: http://redirect.sonarsource.com/plugins/jenkins.html。此插件的作用是调用sonar scanner进行代码扫描,并可以将jenkins构建的结果以comments的形式添加到merge request中。从而方便后续code reviewer的查看。
  • sonar quality gates plugins: https://github.com/jenkinsci/sonar-quality-gates-plugin/blob/master/README.md。此插件的作用是读取一个sonar project的quality gates结果,如果是失败,则更改jenkins 构建的结果为失败或者不稳定。

安装完成之后,我们需要在gitlab端创建一个token供jenkins使用:登录gitlab之后,点击个人头像那个地方,在settings页的access token创建token,注意至少勾选api那的复选框

另外我们需要在sonarqbue端创建一个token供jenkins使用:登录sonarqube后,点击个人头像那个地方,在My Account页的tokens创建token。

然后我们进入jenkins的系统管理-系统设置,找到gitlab的配置块:

找到quality gates - sonarqube的配置块:

找到sonarqube server的配置块:

接下来,我们先建一个自由类型的项目,关键的配置如下:

然后点击Advanced按钮,为本jenkins的构建生成一个token:

在构建触发器的地方,我们只勾选Opened Merge requests,也就是merge request创建的时候进行构建,大家注意截图中有个webhook的url,该url后续需要填入到gitlab中。

在构建这个地方,我们选择execute sonarqube scanner选项。gitlab在发往jenkins的hook中会发送一些变量供我们在jenkins中使用,大家可以参考:https://github.com/jenkinsci/gitlab-plugin#add-a-note-to-merge-requests,如下是个完整变量的截图:

在构建后操作,我们增加了2项:

大家注意下:第一个是Quality Gates Sonarqube Plugin,这个读取代码扫描后的结果,如果分析失败也就是没有通过sonar的质量门,则此次构建的结果为FAILED。第二个是把此次构建的结果以note的形式添加到gitlab的merge request中。

到此,jenkins的配置完成。

gitlab端配置

我们进入gitlab的项目后,点击settings-integration,也就是给项目添加一个webhook,hook的地址就是上面构建中出现的url,token是点击advanced后创建的token,触发器我们只选择Merge request events好了,配置如下:

验证

下面我们在gitlab的项目里面,创建一个merge request,之后,就可以在jenkins端看到触发了sonarqube的代码扫描,并在扫描完成之后,根据是否通过sonar的quality gates,把成功或者失败的信息添加到了merge requests的note中:

总结

文章介绍使用jenkins和sonarqube做基于gitlab的merge request的代码静态检查方法,实用性高。文章介绍的集成方法,除可用于代码检查外,同样可以用于与gitlab集成的自动化测试、性能测试等,建议大家掌握。

另外一个扩展点,就是如果jenkins的构建不过,直接强制关闭gitlab的merge request,而不仅仅是添加一个note。

createprocess失败代码2_DevOPS | 基于sonarqube、jenkins和gitlab的持续集成代码检查相关推荐

  1. 基于Docker容器的,Jenkins、GitLab构建持续集成CI

    ** 开发者将代码提交(push)到GitLab后,GitLab通过Hook通知jenkins,jenkins自动从GitLab中获取项目最新的源码进行集成和发布. 基于Docker,创建一个私有Gi ...

  2. docker jenkins 公钥_搭建 Jenkins 与 GitLab 的持续集成环境

    一.生成新的公私钥 ssh-keygen -t rsa -b 4096 -C "11776174@qq.com" Generating public/private rsa key ...

  3. k8s和harbor的集成_爱威尔-基于kubernetes集群的项目持续集成(gitlab+harbor+Jenkins)安装...

    这个算是基于kubernetes集群的项目持续集成的前导篇,先把这用环境搭建好我们后面就可以专注做基于k8s的docker化项目持续集成了. gitlab安装 https://about.gitlab ...

  4. 搭建hudson/jenkins+cppcheck+cpplint+cccc持续集成环境

    1 Jenkins介绍 Jenkins是基于Java开发的一种持续集成工具,Hudson是它的前身.Jenkins用于监控程序重复的工作,包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执 ...

  5. Jenkins与Docker的持续集成实践

    本文讲的是Jenkins与Docker的持续集成实践[编者的话]持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成 ...

  6. 使用Jenkins搭建iOS/Android持续集成打包平台

    http://debugtalk.com/post/iOS-Android-Packing-with-Jenkins/ http://debugtalk.com/post/iOS-Android-Pa ...

  7. 持续集成Jenkins+Gitlab实现持续集成

    用户说明 假设node3是程序员的个人电脑,在这台机器上编写代码 ip地址192.168.10.10 Git的安装部署及使用 git config --global user.name 'zzg' # ...

  8. Jmeter+Jenkins+Ant 接口自动化持续集成框架

    前言: 首先简单说下jmeter+jenkins+ant接口自动化持续集成框架的工作原理,以便于更好的理解后面的各项配置: 首先,jenkins通过SVN获取jmeter最新的脚本: 然后,jenki ...

  9. Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover【毕成功的博客】 - 51CTO技术博客...

    Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover[毕成功的博客] - 51CTO技术博客

最新文章

  1. Linux(64位)下OpenBabel 2.4.1、python2.7和Ipython实战(二)
  2. 最小二乘法和梯度下降法有哪些区别?
  3. ScrollView的基本用法丶代理方法
  4. 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息
  5. java 写文件的三种方法比较
  6. iqc工作职责和工作内容_猎头如何辨识工作职责和工作业绩?
  7. 要学DOT NET了
  8. java连接access_关于k8s下使用Ingress保持长连接的异常情况排查
  9. 你根本不懂数据仓库!对于80%的大公司数仓只是地基,它才是房子
  10. java 存储输入_java将用户输入信息保存至txt文件
  11. Jenkins下载安装及配置
  12. 【蓝桥杯练习-PWM脉宽调制】
  13. uni.navigateTo传参
  14. [Typecho]更换头像源及显示QQ显示头像
  15. Latex-条目、编号、描述
  16. <JVM上篇:内存与垃圾回收篇>13-垃圾回收器
  17. 安卓 网络工具_小米公布MIUI适配计划,支持10台机型升级安卓Q,9款今年内测
  18. 山西省大学计算机专业排名,山西省:排名前14的大学!山西的大学分为5档,前2档最难考!...
  19. python-设计模式-1
  20. 基于车路协同功能的路侧及车载智能设备研究

热门文章

  1. linux 7.2中文命令,CentOS7如何支持中文显示
  2. android界面布局错位,IOS 浏览器页面布局错位(如:点不到)的分析与解决
  3. Javascript 函数详解
  4. 静态库和动态库的分析
  5. Windows与Linux下tftp服务的使用
  6. 轻松访问 Android 系统源码与下载
  7. [ECMAScript] 说说你对class的理解
  8. [react] react的函数式组件有没有生命周期?
  9. [react] React必须使用JSX吗?
  10. [html] p标签里面嵌套img标签会出现向上高3像素是什么原因?如何处理?