代码质量审查工具之SonarQube8.9(LTS)与gitlab CI集成使用
官网地址: https://docs.sonarqube.org/8.9/analysis/scan/sonarscanner/
目标:在push时自动触发GitLab CI/CD pipeline job, 自动扫描所提交的代码, 并将结果上报到sonarqube
SonarQube - 是一个检测bug, 漏洞及代码异味的自动化工具. 它可以整合到现有的工作流中去启用持续的代码审查在项目的多分支及PR中.
为了方便,这里使用docker进行服务的安装
添加docker-compose.yml文件
version: "3" services:
sonarqube:
image: sonarqube:lts-community #8.9.2社区长期支持版
depends_on:
- db
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
ports:
- "9000:9000" #暴露端口9000
db:
image: postgres:12
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
安装完成之后,默认是9000端口, 当然有可能和现有的端口冲突,例如php-fpm, 解决方法就是修复docker-compose.yml中暴露在宿主机的端口, 然后如果使用域名的话, 使用nginx进行负载即可
登录时候, 默认的用户名和密码都是 admin
1.语言汉化
配置 > 应用市场 > 插件 中搜索Chinese

然后重启服务即可生效
2.修改管理员默认密码
我的账号 > 安全 > 修改密码
3.质量配置
这里可以自定义代码质量检查使用的规则有哪些

例如: 在这里创建一个前端代码检测, 前端js
语言选择JavaScript, 上级可以选无, 添加完成之后, 还可以点击"齿轮设置" 设为 默认
4.添加新项目
点击"项目" 点击"新增项目"

注意,项目标识是项目的唯一标识,也就是在我们项目代码扫描分析后数据上报时使用的key,显示名是在项目列表中显示出来的名称,仅做展示,一般两个保持一致即可。也可以在项目配置中修改标识。
输入完成点击“设置”后,将进入下一步,创建令牌。可以输入名称即可创建,也可以使用已有令牌,令牌可以多个项目用同一个,令牌就是身份认证信息,主要是用于代码扫描分析后树上报时使用认证。

[安装扫描器]
sonarScanner
在上一步中创建完令牌后, 及你如第二步, 分析项目, 根据提示下载对应平台的软件包, 对于js只能使用通用的scanner

选择对应版本
1)解压缩包
2) 修改配置文件
$install_directory/conf/sonar-scanner.properities 修改 根据实际情况进行修改
sonnar.host.url = http://localhost:9000 sonar.sourceEncoding=UTF-8
3)将sonar-scanner命令添加到全局变量中 $install_directory/bin
4) 验证命令是否可用 sonar-scanner -h
usage: sonar-scanner [options] Options:
-D,--define <arg> Define property
-h,--help Display help information
-v,--version Display version information
-X,--debug Produce execution debug output
接下来就可以进行代码扫描了
sonar-scanner -D"sonar.projectKey=docker-vue" -D"sonar.sources=." -D"sonar.host.url=http://sonar.xxx.com" -D"sonar.login=xxxxxxxxxxxxxxxxxxxxxx"
与gitlab进行集成, 在项目根目录下修改.gitlab-ci.yml文件
stages:
- code-check # 添加代码检测job
- install
- build
- deploy sonarqube-check: # 定义sonar代码检测
stage: code-check
variables: # 定义变量
SONAR_PROJECT_KEY: "docker-vue" # 定义缓存key
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # 声明分析任务缓存文件夹
GIT_DEPTH: "0" # 扫描所有代码
tags:
- docker-vue
- vue
only:
- master
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- sonar-scanner -D"sonar.projectKey=${SONAR_PROJECT_KEY}" -D"sonar.sources=." -D"sonar.host.url=${SONAR_HOST}" -D"sonar.login=${SONAR_LOGIN_TOKEN}" # 这里将隐秘信息 定义到项目变量或者项目变量中
allow_failure: true # 允许失败, 不影响整体部署流程 install:
stage: install
tags:
- docker-vue
- vue
only:
- test
- master
cache:
paths:
- node_modules/
script:
- npm install build:
stage: build
tags:
- docker-vue
- vue
only:
- test
- master
cache:
paths:
- node_modules/
policy: pull
script:
- npm run lint
- npm run build
artifacts:
name: 'bundle'
paths:
- dist/ delopy-test:
stage: deploy
tags:
- docker-vue
- vue
only:
- test
script:
- rm -rf /data/www/docker-vue-test/*
- cp -rf dist/* /data/www/docker-vue-test delopy-prod:
stage: deploy
tags:
- vue
only:
- master
script:
- rm -rf /data/www/docker-vue-prod/*
- cp -rf dist/* /data/www/docker-vue-prod
# when: manual
我这边使用的社区版本, 存在一个问题, 就是扫描的话只支持主分支, 其他分支不支持, 这里有其他提供的第三方支持,
因社区版是免费开源的,所以不提供扫描项目切换分支的功能,但适合真正生产环境的项目会具有多个分支,只能扫描主分支的SonarQube社区版显然很不满足你的需求,而开发者版和企业版支持但是需要大量的欧元。别担心,插件市场提供了一款可以切换分支的插件,sonarqube-community-branch-plugin,Let’s go!
中文插件地址https://github.com/mc1arke/sonarqube-community-branch-plugin 。

1.选择对应的版本下载
SonarQube:8.9.2对应的jar包:sonarqube-community-branch-plugin-1.8.1.jar。
2.下载完成放在目录 extensions/plugins 下
3. 需要同官网描述修改SonarQube的配置文件:sonar.properties。
进入conf文件夹,使用vim命令修改sonar.properties,在文件末尾加入两行:
sonar.web.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.8.1.jar=web
sonar.ce.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.8.1.jar=ce
保存退出。
***若你的容器里没用vim命令,先尝试apt-get update + apt-get install vim两句命令,若还是不行可以看看有没有yum -y install vim命令,若都没有可以尝试先将容器内部文件拷出来,修改完再拷回去,参考命令如下:
docker cp sonarqube:/opt/sonarqube/conf/sonar.properties /opt/sonar.properties docker cp /opt/sonar.properties sonarqube:/opt/sonarqube/conf/sonar.properties
重启SonarQube


常见问题:
1,启动docker容器的时候, 发现失败 查看报错日志发现
sonarqube、elasticsearch报virtual memory areas vm.max_map_count [65530] is too low
解决:
修改/etc/sysctl.conf文件
添加一下内容
vm.max_map_count=655360
执行命令生效:
sysctl -p
然后重启容器即可
2.我在gitlab-ci文件中使用到了群组变量和项目变量
出现群组变量取不到, 导致代码扫描失败的问题

这里的变量区分是否受保护
如果你的指定的分支或标签中 并不是受保护的, 就获取不到该变量 , 一定注意!!!
变量可以参考https://docs.sonarqube.org/8.9/analysis/analysis-parameters/
3.代码扫描失败, 是有文件中的git-depth定义为0 , 要保持一致

参考:
代码质量审查工具之SonarQube8.9(LTS)与gitlab CI集成使用的更多相关文章
- JSLint JavaScript代码质量审查工具汉化中文版隆重发布
JSLint是一款JavaScript代码质量审查工具,它可以指出代码中错误.不规范的地方,非常之严格,甚至多写一个空格都会发出警告. JSLint的审查规则,根据众多前辈多年编程经验而写,字字珠玑, ...
- C++代码质量度量工具大阅兵
姊妹篇:Java代码质量度量工具大阅兵: https://www.cnblogs.com/jiangxinnju/p/10010177.html cppcheck cppcheck: https:// ...
- Java代码质量度量工具大阅兵
FindBugs FindBugs, a program which uses static analysis to look for bugs in Java code. It is free so ...
- PHP 代码质量检测工具的安装与使用
代码统计工具 PHPLOC安装:wget https://phar.phpunit.de/phploc.phar chmod +x phploc.phar sudo mv phploc.phar /u ...
- linux 提高代码质量的工具
很多IT公司对于软件开发都有严格的分工,这包括设计.测试.服务支持等等.但是,我一直都认为只有开发者才是真正对软件质量负责的人.没有好的软件设计,软件质量基本上是无从谈起.当然,要做到这一点是需要额外 ...
- doctest --- 一个改善python代码质量的工具
[简介] 说实话吧,之前一直没有怎么重视给自己的代码加上测试逻辑:也就是说我只是写了代码,但是并没有给自己的代码加上测试代码: 整个过程就是写完后自己测试一下,看一下跑出来的结果是正确的就心满意足了. ...
- RubyCritic:一款不错的检测代码质量工具
关注代码质量是高效开发必须要做的一件事,那么在 Ruby 开发的过程中,是否有什么好的代码质量检测工具呢?下面由 Ruby 工程师路英瑞介绍一下 RubyCritic--一款还不错的代码质量检测工具. ...
- 提高代码质量 CheckStyle FindBugs PMD
提高代码质量-工具篇 注:这是一篇翻译文章,原文:How to improve quality and syntax of your Android code,为了理解连贯,翻译过程中我修改了一些陈述 ...
- 使用JSLint提高JS代码质量
随着富 Web 前端应用的出现,开发人员不得不重新审视并重视 JavaScript 语言的能力和使用,抛弃过去那种只靠“复制 / 粘贴”常用脚本完成简单前端任务的模式.JavaScript 语言本身是 ...
- 代码质量检测-Sonar
一. Sonar简介 sonarqube系统是一个代码质量检测工具 由以下四个组件组成(https://docs.sonarqube.org/display/SONAR/Architecture+an ...
随机推荐
- 千牛hook 旺旺hook,旺旺发消息call,千牛发消息call,千牛机器人,破解旺旺发消息代码,破解千牛发消息代码,反汇编旺旺发消息,反汇编千牛发消息,旺旺发消息组件,千牛发消息组件
由于工作需要,做了相关的编码,有demo,拿去后,直接按demo写代码即可实现千牛发消息,非常稳定.非反汇编找call,基本不怕千牛升级,原理是基于千牛架构做出来的,除非千牛改架构,已稳定使用2年,未 ...
- c程序设计语言 by K&R(三)结构
一.类型定义 typedef typedef int Length; typedef char* String; typedef struct tnode* Treeptr; typedef int ...
- MonoDevelop 的续集dotdevelop
DotDevelop 是一个跨平台的 .NET 集成开发环境(IDE),它原本是 MonoDevelop 的分支项目,这个项目更侧重于 Linux 支持和 GTK3 升级,github:https:/ ...
- idea运行java项目main方法报build failure错误的解决方法
当在使用 IntelliJ IDEA 运行 Java 项目的 main 方法时遇到 "Build Failure" 错误,这通常意味着在项目的构建过程中遇到了问题.解决这类问题通常 ...
- Vue3——集成 sass
安装 sass npm install sass sass-loader -D 使用 scss 语法!!!需要加上 lang="scss" <style scoped lan ...
- 暑假集训CSP提高模拟 16
\[暑假集训CSP提高模拟 \lim_{x\rightarrow\infty}\frac{8f_{x}}{f_{x+1}}\times(\sqrt{5}+1),\ \forall f_{x}=f_{x ...
- 仿函数(Functor)是什么?
仿函数(Functor) 仿函数是通过重载()运算符的类或结构体的对象.这样一个对象可以像普通函数一样被调用. 仿函数通常用于需要在对象内部保留状态或多次调用时有特定行为的情况. 特点: 仿函数是一个 ...
- CentOS7 控制台上安装运行 vmware workstation 备忘录
目标平台 CentOS 7.5.1804 无桌面,要跑个 Ubuntu.vmx 1.安装依赖库 yum -y install perl gcc kernel-devel libX11 libXiner ...
- CentOS开放端口的方法(转载)
CentOS开放端口的方法 转载:https://www.itfeichai.com/centos-open-porter/ Centos升级到7之后,内置的防火墙已经从iptables变成了fire ...
- USB configfs与USB functionfs的区别及关系
configfs 和 functionfs 是 Linux 内核中用于配置和管理 USB 设备行为的两种不同的文件系统,它们各自的用途和工作方式有所不同,但在 USB Gadget 子系统中可以结合使 ...