createprocess失败代码2_DevOPS | 基于sonarqube、jenkins和gitlab的持续集成代码检查
在持续集成过程中,针对代码的静态检查一般有两个时间点:一是提交代码的时候、二是提交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的持续集成代码检查相关推荐
- 基于Docker容器的,Jenkins、GitLab构建持续集成CI
** 开发者将代码提交(push)到GitLab后,GitLab通过Hook通知jenkins,jenkins自动从GitLab中获取项目最新的源码进行集成和发布. 基于Docker,创建一个私有Gi ...
- docker jenkins 公钥_搭建 Jenkins 与 GitLab 的持续集成环境
一.生成新的公私钥 ssh-keygen -t rsa -b 4096 -C "11776174@qq.com" Generating public/private rsa key ...
- k8s和harbor的集成_爱威尔-基于kubernetes集群的项目持续集成(gitlab+harbor+Jenkins)安装...
这个算是基于kubernetes集群的项目持续集成的前导篇,先把这用环境搭建好我们后面就可以专注做基于k8s的docker化项目持续集成了. gitlab安装 https://about.gitlab ...
- 搭建hudson/jenkins+cppcheck+cpplint+cccc持续集成环境
1 Jenkins介绍 Jenkins是基于Java开发的一种持续集成工具,Hudson是它的前身.Jenkins用于监控程序重复的工作,包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执 ...
- Jenkins与Docker的持续集成实践
本文讲的是Jenkins与Docker的持续集成实践[编者的话]持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成 ...
- 使用Jenkins搭建iOS/Android持续集成打包平台
http://debugtalk.com/post/iOS-Android-Packing-with-Jenkins/ http://debugtalk.com/post/iOS-Android-Pa ...
- 持续集成Jenkins+Gitlab实现持续集成
用户说明 假设node3是程序员的个人电脑,在这台机器上编写代码 ip地址192.168.10.10 Git的安装部署及使用 git config --global user.name 'zzg' # ...
- Jmeter+Jenkins+Ant 接口自动化持续集成框架
前言: 首先简单说下jmeter+jenkins+ant接口自动化持续集成框架的工作原理,以便于更好的理解后面的各项配置: 首先,jenkins通过SVN获取jmeter最新的脚本: 然后,jenki ...
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover【毕成功的博客】 - 51CTO技术博客...
Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover[毕成功的博客] - 51CTO技术博客
最新文章
- Linux(64位)下OpenBabel 2.4.1、python2.7和Ipython实战(二)
- 最小二乘法和梯度下降法有哪些区别?
- ScrollView的基本用法丶代理方法
- 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息
- java 写文件的三种方法比较
- iqc工作职责和工作内容_猎头如何辨识工作职责和工作业绩?
- 要学DOT NET了
- java连接access_关于k8s下使用Ingress保持长连接的异常情况排查
- 你根本不懂数据仓库!对于80%的大公司数仓只是地基,它才是房子
- java 存储输入_java将用户输入信息保存至txt文件
- Jenkins下载安装及配置
- 【蓝桥杯练习-PWM脉宽调制】
- uni.navigateTo传参
- [Typecho]更换头像源及显示QQ显示头像
- Latex-条目、编号、描述
- <JVM上篇:内存与垃圾回收篇>13-垃圾回收器
- 安卓 网络工具_小米公布MIUI适配计划,支持10台机型升级安卓Q,9款今年内测
- 山西省大学计算机专业排名,山西省:排名前14的大学!山西的大学分为5档,前2档最难考!...
- python-设计模式-1
- 基于车路协同功能的路侧及车载智能设备研究
热门文章
- linux 7.2中文命令,CentOS7如何支持中文显示
- android界面布局错位,IOS 浏览器页面布局错位(如:点不到)的分析与解决
- Javascript 函数详解
- 静态库和动态库的分析
- Windows与Linux下tftp服务的使用
- 轻松访问 Android 系统源码与下载
- [ECMAScript] 说说你对class的理解
- [react] react的函数式组件有没有生命周期?
- [react] React必须使用JSX吗?
- [html] p标签里面嵌套img标签会出现向上高3像素是什么原因?如何处理?