目录
前言
正文
一、准备工作
二、操作步骤
三、模块关系图谱
四、工具
前言
随着研发团队的日益壮大,代码质量管理变得越来越有必要。本文只是介绍一种代码静态检测系统搭建的建议和思路,大家也可以理解成是一种设计方案。
正文
一、准备工作
1. 拥有(新建)一个gitlab的代码仓库。
2. 项目具备管理员权限,普通开发者角色(developer)没有配置权限。
【如果你没有如下图所示的“设置”选项,就不用瞎折腾了。我就因为没有这个选项,自己瞎鼓捣了好久,而相关负责的同学还在瞎指挥,我从一开始就怀疑是不是自己缺少权限,太悲哀了。】
3.拥有sonar和epona的账号。
二、操作步骤
1. 在 Sonar 中创建项目,定义并填写项目的名称(display name)和 Project Key,注意:你可以不记得项目名称,但是一定要记得Project Key,具体如下图所示:
2. 在钉钉中建立代码静态检测结果通知群组(一般至少要拉三个人才能建群),建好群后添加机器人,群组设置-职能群助手-机器人管理-添加机器人,如下图所示:
然后,选择“自定义”选项,图标如下图所示:
填写机器人名称,同时勾选“加签”,具体操作如下图所示:
注意:勾选“加签”时,一定要记得保存密钥,之后就“消失”了。点击“完成”按钮后,会出现钉钉hook的通知地址,也记得保存下来。
3. 在 epona 中创建钉钉机器人,具体操作和注意事项如下图所示:
4. 在gitlab项目中添加CICD变量,其中,BOT_ALIAS 和钉钉机器人的唯一标识保持一致,PROJECT_KEY 和sonar中定义的项目 Project Key 保持一致,具体如下图所示:
5. 填写 .gitlab-ci.yml 配置文件,可以参考下面的示例内容:
stages:
- code_quality
- code_report
SONAR 分析:
tags:
- docker
stage: code_quality
image: harbor.***.com/sonar-scanner/sonar-scanner-cli:latest
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache
GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- sonar-scanner
-Dsonar.verbose=false
-Dsonar.projectKey=electron
-Dsonar.projectName=electron
-Dsonar.projectVersion=lozen/test
-Dsonar.sources=.
-Dsonar.qualitygate.wait=true
#-Dsonar.exclusions=src/third_party/**/*,src/build/**/*,src/buildtools/**/*,src/tools/**/*,src/test/**/*,src/testing/**/*
#-Dsonar.test.exclusions=src/test/**/*,src/testing/**/*
allow_failure: true
only:
- lozen/test
- dev
- release
- master
SONAR 报告:
tags:
- docker
stage: code_report
image: ${DOCKER_REGISTRY}/cicd/sonarnotify:latest
script:
- sonarnotify
only:
- lozen/test
- dev
- release
- master
三、模块关系图谱
整个系统包括四个大的模块,其中,模块之间的关系图谱如下图所示。这个系统的工作原理就是研发人员提交新的代码到Gitlab仓库后,Gitlab仓库会把代码push到Sonar代码静态检测模块,然后由Sonar完成检测后,回调通知检测结果给钉钉机器人,钉钉机器人再把结果展示在钉钉群组里。
四、工具
整体系统搭建肯定不是从0开始的,肯定会依赖很多开源的工具方案,主要工具如下:
1. SonarQube - Code Quality and Code Security
2. sonar-scanner-cli - Run code analysis on SonarQube
3. sonarqube-community-branch-plugin - A plugin for SonarQube to allow branch analysis