天天看点

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

目录

​1. gitlab-ci.yml的配置​

​​1.1 几个基本概念​​

​​1.2 使用CI进行代码检查demo​​

​2. Sonarqube安装和配置​

​​2.1 Sonarqube安装​​

​​2.2 数据库配置​​

​​2.3 sonar-scanner安装​​

​​2.4 sonar-cxx插件安装​​

​​2.4 启动​​

​​2.5 gitlab插件安装​​

​​2.6 创建项目​​

​​3. Gitlab-CI配置​​

​4. 进阶配置​

​​4.1 规则配置​​

​​4.2 阈值设置​​

​​4.3 设置自动将扫描结果以评论形式写到gitlab​​

​​结语​​

前两次我们讲了如何配置gitlab runner(坑挖了挺久,因为是挺久前弄的,后来交给其他人维护了···)。本节主要讲gitlab-ci的一些基本概念,并通过配置使用sonarqube进行静态检查来进行实践。

gitlab ci通过项目内的.gitlab-ci.yml进行配置。语言是YAML。

pipeline: 流水线,也就是整个CI检查的过程

job: 工作项,可以取任意名字,可以建立任意个工作项,工作项是流水线的一个过程。

stage: 每个工作项可以属于一个stage,类似于分组

script: script是工作项中执行具体检查的shell 命令

before_script: 所有工作项执行前会执行的命令,一般用于配置环境。

example:

1.建立一个测试项目,并为其设置runner(参考 使用gitlab runner 进行CI(二):gitlab runner的安装与配置)

2.创建.gitlab-ci.yml文件,并将上文example内容拷贝至该文件

3.提交修改

此时,在项目的CI/CD-》Pipelines页面(或Job),我们就可以看到pipeline的运行情况:

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

其中Status指示是否成功,点击Stages可进入相应Stage运行的详细情况:

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

可以看到是依次执行了before_script和job中的script命令。并最终成功了。

SonarQube是一种自动代码审查工具,用于检测代码中的静态错误,漏洞以及代码异常(如命名规范、代码重复等)。支持C++、Java、Python等多种语言,能够方便的和git、Jenkins、Gitlab-runner等集成,可以方便的作为代码PR前的前置条件。

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

PS: 安装平台为Ubuntu

为了能使用后面需要用到的C++扫描插件,我们安装7.6版本(这个插件现在支持更高版本的了,还没试过):

​​https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.6.zip​​

解压即可,假设我们解压的路径为~/sonarqube。

我这边暂时使用mysql,不过sonarqube最新的版本已经放弃了mysql的支持,可以使用其他的数据库。

修改sonarqube的配置(~/sonarqube/conf/sonar.properties):

其中jdbc.username和jdbc.password都是我们自己的mysql用户名和密码

sonar-scanner是在没有指定scanner时的默认scanner.

​​https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip​​

下载解压即可

sonar-cxx是开源的静态检测C++的插件,

根据 ​​https://github.com/SonarOpenCommunity/sonar-cxx/wiki/Compatibility-Matrix​​版本对应关系,下载​​https://github.com/SonarOpenCommunity/sonar-cxx/releases​​对应的插件版本到~/sonarqube/extensions/plugins下即可

启动后登陆 http://ip:9000可验证是否启动成功,默认密码是admin/admin

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

7.6版本的需要安装gitlab插件来和gitlab联动,直接在2.4中的页面安装即可:

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查
使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查
使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

最终得到:

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

主要是为了获得这个login的token。

在我们要进行检查的项目下,创建.gitlab-ci.yaml:

其他项目替换projectKey,和login的token即可

在发起PR后,我们就可以看到:

点击stage可以看到sonarqube的打印:

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

登陆sonarqube的web界面,可以看到详细的报告:

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

完整的规则很多,不一定每一条都适用于我们的项目,我们可以禁用和启用一些规则来形成适合自己的规则:

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

阈值是用来判定静态检查是否失败的设置,比如重复度。

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

一个比较有用的功能是,扫描完成后,以评论形式发送到gitlab的Merge request, 有助于帮助进行Code review。

首先我们可以创建一个专门用于发送这类消息的gitlab账号,这样以免和我们自己发的评论弄混。当然这个账号需要有这个项目的评论权限。

在创建好账号后,通过该账号创建Access Token:

注意保存好这个token

登陆sonarqube页面,设置gitlab:

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

经过这样得设置,我们再触发这个静态检查,就能看到结果以评论的形式展现了,发起者就是我们上面建立的账号:

使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查
使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查

通过sonarqube和gitlab联动,可以自动的帮我们完成一些静态检查,规避常见的漏洞,也能减少代码重复率。