使用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进行静态检查来进行实践。

1. gitlab-ci.yml的配置

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

1.1 几个基本概念

pipeline: 流水线,也就是整个CI检查的过程
job: 工作项,可以取任意名字,可以建立任意个工作项,工作项是流水线的一个过程。
stage: 每个工作项可以属于一个stage,类似于分组
script: script是工作项中执行具体检查的shell 命令
before_script: 所有工作项执行前会执行的命令,一般用于配置环境。

example:

before_script:
##设置环境变量
  - export PATH=$PATH 

## 定义有哪些stages 
stages:
  - analysis
  - build
  - test
  - deploy

##job名称
cppcheck:
  stage: analysis
  ##具体命令
  script: 
   - source ~/.bashrc
   - echo hello_ci
  tags:
  ## 执行此项job的runner,设置见本系列第二节
    - cppcheck

1.2 使用CI进行代码检查demo

1.建立一个测试项目,并为其设置runner(参考 使用gitlab runner 进行CI(二):gitlab runner的安装与配置)
2.创建.gitlab-ci.yml文件,并将上文example内容拷贝至该文件
3.提交修改
此时,在项目的CI/CD-》Pipelines页面(或Job),我们就可以看到pipeline的运行情况:

图片

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

图片

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

2. Sonarqube安装和配置

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

图片

2.1 Sonarqube安装

PS: 安装平台为Ubuntu
为了能使用后面需要用到的C++扫描插件,我们安装7.6版本(这个插件现在支持更高版本的了,还没试过):binaries.sonarsource.com 解压即可,假设我们解压的路径为~/sonarqube。

2.2 数据库配置

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

sudo apt update  #更新软件源
sudo apt install mysql-server  #安装mysql

修改sonarqube的配置(~/sonarqube/conf/sonar.properties):
其中jdbc.username和jdbc.password都是我们自己的mysql用户名和密码

# User credentials.
# Permissions to create tables, indices and triggers must be granted to JDBC user.
# The schema must be created first.
sonar.jdbc.username=root
sonar.jdbc.password=123456

#----- Embedded Database (default)
# H2 embedded database server listening port, defaults to 9092
#sonar.embeddedDatabase.port=9092

#----- DEPRECATED 
#----- MySQL >=5.6 && <8.0
# Support of MySQL is dropped in Data Center Editions and deprecated in all other editions
# Only InnoDB storage engine is supported (not myISAM).
# Only the bundled driver is supported. It can not be changed.
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?user=root&password=123456&useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

2.3 sonar-scanner安装

sonar-scanner是在没有指定scanner时的默认scanner. binaries.sonarsource.com 下载解压即可

2.4 sonar-cxx插件安装

sonar-cxx是开源的静态检测C++的插件, 根据 github.com/SonarOpenCom版本对应关系,下载github.com/SonarOpenCom对应的插件版本到~/sonarqube/extensions/plugins下即可

2.4 启动

cd ~/sonarqube/bin/linux-x86-64
./sonar.sh

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

图片

2.5 gitlab插件安装

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

图片

2.6 创建项目

图片

最终得到:

图片

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

3. Gitlab-CI配置

在我们要进行检查的项目下,创建.gitlab-ci.yaml:其他项目替换projectKey,和login的token即可

before_script:
##设置环境变量
  - export PATH=$PATH 

## 定义有哪些stages 
stages:
  - analysis
  - build
  - test
  - deploy
  
sonarcheck:
  except:
    - schedules
  ### 指定只在PR、master和创建tag的时候运行    
  only:
    - merge_requests
    - master
    - tags
  stage: analysis
  script:
   - source ~/.bashrc
   - export PATH=/home/uniubi/software/sonar-scanner-4.6.0.2311-linux/bin:$PATH ### sonar-scanner的路径
   - sonar-scanner -Dsonar.projectKey=demo -Dsonar.sources=. -Dsonar.host.url=http://XXX:9000 -Dsonar.login=b7db4dc570ab507c272557c2d0cec6487dbcc8a9 -Dsonar.gitlab.commit_sha=$CI_BUILD_REF -Dsonar.gitlab.ref_name=$CI_BUILD_REF_NAME -Dsonar.gitlab.project_id=$CI_PROJECT_PATH -Dsonar.language=c++ -Dsonar.sourceEncoding=UTF-8 -Dsonar.gitlab.max_blocker_issues_gate=-1 -Dsonar.gitlab.max_critical_issues_gate=-1 -Dsonar.gitlab.query_max_retry=50 -Dsonar.gitlab.query_wait=1000
  ###允许失败,可根据自己项目需要设置 
  allow_failure: true
  ###对应gitlab-runner的tags
  tags:
    - cppcheck

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

图片

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

图片

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

图片

4. 进阶配置

4.1 规则配置

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

图片

4.2 阈值设置

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

图片

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

一个比较有用的功能是,扫描完成后,以评论形式发送到gitlab的Merge request, 有助于帮助进行Code review。
首先我们可以创建一个专门用于发送这类消息的gitlab账号,这样以免和我们自己发的评论弄混。当然这个账号需要有这个项目的评论权限。在创建好账号后,通过该账号创建Access Token:

图片

注意保存好这个token 登陆sonarqube页面,设置gitlab:

图片

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

图片

图片

结语

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 GitLab 中,一个 runner 可以是启用状态(active)或者停用状态(not active)。如果你看到 `gitlab-runner-ci is not active`,这意味着这个 runner 当前被停用了。 有几种可能的原因导致 runner 处于停用状态: 1. 你可能在 GitLab 的项目设置中手动停用了这个 runner。 2. 如果 runner 上的 token 发生了更改,则 runner 将被自动停用。 3. 如果 runner 所在的机器或者网络出现故障,它也会被停用。 如果你想让 runner 重新启用,你可以在 GitLab 的项目设置中启用它。如果这个 runner 是由于 token 更改或者网络故障导致停用的,你可能需要重新配置并启动 runner。 ### 回答2: GitLab Runner是一个持续集成(CI)工具,它用于运行自动化构建和测试任务。当状态显示为"not active"时,并且持续以黑色显示,通常有以下几种可能的原因: 1. GitLab Runner未正确安装:可能是由于安装过程中出现了错误或问题,导致Runner无法正常启动。你可以尝试重新安装GitLab Runner,确保按照官方文档中的指引正确配置和安装。 2. 没有配置Runner:在GitLab中,你需要为每个项目配置Runner才能运行CI任务。如果没有为项目配置Runner或配置有误,Runner将无法正常启动。你可以检查项目设置中的CI/CD设置,确保Runner正确关联到项目。 3. Runner未连接到GitLab服务器:Runner需要连接到GitLab服务器才能接收和执行CI任务。如果Runner无法连接到服务器,它将无法正常工作。你可以检查网络连接,确保GitLab服务器可访问。 4. Runner的配置文件有误:可能是Runner的配置文件中存在错误,例如错误的URL、证书或认证信息。你可以检查Runner的配置文件(通常存储在/etc/gitlab-runner/config.toml),确保配置正确。 5. Runner身份验证失败:如果GitLab Runner的身份验证失败,它将不能与GitLab服务器通信。你可以检查GitLab Runner的授权令牌,确保其有效和正确配置。 总之,出现"not active"且黑色显示的情况,通常是由于GitLab Runner安装、配置或网络问题导致的。检查这些方面,并进行相应的修复和调试,你应该能够使GitLab Runner正常工作。 ### 回答3: 当gitlab-runner-ci显示为黑色时,意味着该runner当前处于不活动状态。出现此问题的原因可能有以下几点: 1. GitLab Runner未安装或未配置:如果没有正确安装或配置GitLab Runner,则它将无法正常工作。可以通过检查确保正确安装和配置了GitLab Runner。 2. GitLab Runner未注册:在GitLab使用GitLab Runner必须先进行注册。通过运行`gitlab-runner register`命令并提供必要的信息,如GitLab URL和runner token,来注册GitLab Runner。 3. GitLab Runner未启动:如果GitLab Runner未启动,则无法正常工作。可以通过运行`gitlab-runner start`命令来启动GitLab Runner。 4. GitLab Runner没有正确与GitLab通信:GitLab Runner需要与GitLab进行通信才能正常工作。可能是由于网络问题或GitLab配置问题导致无法与GitLab通信。可以检查网络连接并确保GitLab配置正确。 5. 硬件或操作系统问题:如果系统硬件或操作系统存在问题,可能会导致GitLab Runner无法正常工作。可以检查操作系统和硬件要求是否满足,并确保系统稳定。 综上所述,当GitLab Runner-ci显示为黑色时,可能存在安装、配置、注册、启动、网络通信或系统问题导致。通过检查这些方面,可以解决问题并确保GitLab Runner-ci正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingInCV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值