系列文章目录

一 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流程能否成功。

gitlab统计代码总行数 gitlab代码统计插件_ci

gitlab统计代码总行数 gitlab代码统计插件_devops_02

gitlab统计代码总行数 gitlab代码统计插件_devops_03

2.下载安装

此插件与sonarqube的版本对应情况及下载地址:

For SonarQube < 5.4:

For SonarQube >= 5.4 and < 5.6:

For SonarQube >= 5.6 and < 6.7:

For SonarQube >= 6.7 and < 7.0:

For SonarQube >= 7.0:

与系列文章第二篇中安装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统计代码总行数 gitlab代码统计插件_devops_04

这里登录我们自己搭建的gitlab服务器,进入user settings,access tokens。Name填Sonarqube。

gitlab统计代码总行数 gitlab代码统计插件_ci_05

下面是一些权限设置,根据情况勾上就好了。然后点击Create personal access token。并把生成的token复制下来贴到sonarqube里的gitlab user token里就ok了。

gitlab统计代码总行数 gitlab代码统计插件_devops_06

在我们的项目根目录下创建一个叫.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。

gitlab统计代码总行数 gitlab代码统计插件_gitlab统计代码总行数_07

gitlab统计代码总行数 gitlab代码统计插件_git_08

gitlab统计代码总行数 gitlab代码统计插件_ci_09

总结

在本篇我们介绍了sonar-gitlab-plugin这一插件,并利用它完成了整合gitlab-ci流程和sonarqube代码检测流程的功能。这个系列文章到此就结束了。