代码质量审查工具之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 ...
随机推荐
- pyinstaller 打包成 exe
生成 spec 和可执行文件: pyinstaller --onefile your_file.py 如果需要修改生成的spec文件,则后续可以这样运行: pyinstaller -F your_fi ...
- mysql 和 sqlalchemy 的一个测试环境
Mysql: docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysqldocker exec ...
- Seata 四大模式详解
分布式事务 参考文章: 分布式事务实战方案汇总 https://www.cnblogs.com/yizhiamumu/p/16625677.html 分布式事务原理及解决方案案例https://www ...
- 必应每日壁纸API封装
简介 这个类封装了必应首页的每日壁纸查看功能,提供了查看.保存壁纸的方法,最大支持查看近8天的壁纸 使用方法 async Task Main() { try { var bing = BingWall ...
- 项目发布后项目时间和linux时间不一致
查阅了很多资料,本来总以为是项目的问题,启动前端,连接不同的后台,本地项目时间是正确的,部署到linux Docker容器就不行.很纳闷...... 基于以上,还是决定记下来,以便后来的人查阅,解决问 ...
- Linux下执行文件删除的操作{确认!确认! 确认!再三确认!}
ubuntu 删除文件夹命令 rm -r 文件名字 ---> 强制删除XXX文件 rm -f 文件名字 ---> 强制删除XXX文件(centos) 注: linux 中, 强制删除文件的 ...
- Java如何将Object转换成指定Class对象
在Java中,将Object转换为指定类型的Class对象实际上是两个不同概念的操作: 将Object实例转换为特定类型的实例:这通常涉及到类型转换(如(MyType) myObject)或者通过反射 ...
- 《Vue.js 设计与实现》读书笔记 - 第7章、渲染器的设计
第7章.渲染器的设计 7.1 渲染器与响应系统的结合 渲染器需要有跨平台的能力. 在浏览器端会渲染为真实的 DOM 元素. const { effect, ref } = VueReactivity ...
- USB gadget驱动框架(五)
本节主要分析虚拟串口的tty设备的注册.创建/dev/ttyGSx设备节点.tty相关接口的实现. tty的申请与注册 源码:drivers/usb/gadget/function/u_serial. ...
- USB gadget functionfs
FunctionFS (Function Filesystem) 是 Linux USB Gadget 框架的一部分,专门用于从用户空间实现和控制自定义的 USB 功能.它提供了一种文件系统接口,使用 ...