系列文章目录
一 ubuntu20.04搭建Sonarqube服务器&&sonar-scanner
二 sonarqube安装c++插件并检测c++代码
三 sonarqube安装gitlab插件集成gitlab-ci
目录
系列文章目录
前言
一、git以及gitlab简介
二、sonar-gitlab-plugin
1.简介
2.下载安装
三、整合gitlab-ci和sonarqube
1.相关配置
2.测试
总结
前言
在前面我们介绍了sonarqube以及sonar-cxx插件,并完成了使用sonarqube检测c++代码的过程。本篇我们介绍另一个插件sonar-gitlab-plugin,利用这个插件我们可以整合gitlab-ci流程和sonarqube代码检测流程。
注意⚠️本篇所介绍的内容的前提条件是已搭建好gitlab服务器并跑通gitlab-ci。
一、git以及gitlab简介
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、sonar-gitlab-plugin
1.简介
源码地址:https://hub.fastgit.org/gabrie-allaigre/sonar-gitlab-plugin
sonar-gitlab-plugin是配合sonarqube使用的一个插件,使用这个插件,我们可以让gitlab服务器收到push请求后出发sonarqube的代码检测,检测完成以后可以将检测结果以commit comment和comment line的形式反馈到gitlab服务器上。并且把代码检测作为gitlab-ci流程中的一步,这样通过sonarqube上设定的quanlify gate来控制ci流程能否成功。
2.下载安装
此插件与sonarqube的版本对应情况及下载地址:
For SonarQube < 5.4:
- Download last version https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/1.6.6/sonar-gitlab-plugin-1.6.6.jar
For SonarQube >= 5.4 and < 5.6:
- Download last version https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/1.7.0/sonar-gitlab-plugin-1.7.0.jar
For SonarQube >= 5.6 and < 6.7:
- Download last version https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/3.0.1/sonar-gitlab-plugin-3.0.1.jar
For SonarQube >= 6.7 and < 7.0:
- Download last version https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/3.0.2/sonar-gitlab-plugin-3.0.2.jar
For SonarQube >= 7.0:
- Download last version https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/4.0.0/sonar-gitlab-plugin-4.0.0.jar
与系列文章第二篇中安装cxx插件的过程类似,下载好jar文件后放到SONARQUBE_HOME/extensions/plugins目录下,重启sonarqube服务器即可。
三、整合gitlab-ci和sonarqube
1.相关配置
登录sonarqube服务器(http://localhost:9000),点击Administration,configuration,可以看到左边有gitlab的选项,其中gitlab url是我们gitlab服务器的地址,gitlab user token需要我们去gitlab服务器上获得。
这里登录我们自己搭建的gitlab服务器,进入user settings,access tokens。Name填Sonarqube。
下面是一些权限设置,根据情况勾上就好了。然后点击Create personal access token。并把生成的token复制下来贴到sonarqube里的gitlab user token里就ok了。
在我们的项目根目录下创建一个叫.gitlab-ci.yml的文件(跑通gitlab-ci流程的话应该已经有这个文件),这里我们只写一个简单的例子:
stages:
- test
test_job:
stage: test
script:
- sh sonar_analyze.sh
tags:
- test
这里的sonar_analyze.sh是我们执行sonar-scanner的脚本,类似这样:
sonar-scanner \
-Dsonar.host.url=http://127.0.0.1:9000 \
-Dsonar.login=admin \
-Dsonar.password=admin \
-Dsonar.issuesReport.html.enable=true \
-Dsonar.analysis.mode=preview \
-Dsonar.gitlab.project_id=$CI_PROJECT_ID \
-Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA \
-Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
这样相关配置就完成了。
2.测试
在我们的项目下创建一个文件test.cpp。主要是想写一些不太好的代码出来让它检测,大家自由发挥吧。。。(里面的void foo)是cppcheck官网给的一个例子。
#include<string>
#include<iostream>
//test_bugs
void foo(int y)
{
int buf[19];
if (x == 1000)
buf[x] = 0; // <- ERROR
}
void foo1(int x)
{
char bu[10];
char z=5;
bu[z]=3;
bu[x] = 0; // <- ERROR
if (x == 100) {}
}
int main()
{
char d=6;
if(d==6)
cout<<1<<endl;
else if(d==3)
cout<<2<<endl;
else if(d>3)
cout<<3<endl;
int *c=new int[200];
a[d]=10;
return 0;
}
然后git add、commit、push素质三连。到gitlab页面上,点击我们的项目里的CI/CD,pipelines,可以看到触发的ci流程,因为我们的代码不满足我们在sonarqube设定的qualify gate,这里构建失败了。点击那一串神秘代码,可以看到sonarqube对于本次commit所添加的comment。
总结
在本篇我们介绍了sonar-gitlab-plugin这一插件,并利用它完成了整合gitlab-ci流程和sonarqube代码检测流程的功能。这个系列文章到此就结束了。