代码质量审查工具之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 ...
随机推荐
- 【YashanDB知识库】ODBC驱动类问题定位方法
[标题]ODBC驱动类问题定位方法 [需求分类]故障分析 [关键字]ODBC [需求描述]由于我们的ODBC接口目前尚不完善,经常会遇见ODBC接口能力不足导致应用功能无法运行的问题,需要定位手段确定 ...
- 必应每日壁纸API封装
简介 这个类封装了必应首页的每日壁纸查看功能,提供了查看.保存壁纸的方法,最大支持查看近8天的壁纸 使用方法 async Task Main() { try { var bing = BingWall ...
- RxJS 系列 – Conditional and Boolean Operators
前言 前几篇介绍过了 Creation Operators Filtering Operators Join Creation Operators Error Handling Operators T ...
- typescript 5.1
http://www.patrickzhong.com/TypeScript/PREFACE.html 前言 TypeScript 官网大约从 2020 年开始要打造新版的官网,其中包括官网的样式,以 ...
- dfs与贪心算法——洛谷5194
问题描述: 有n个砝码,将砝码从大到小排列,从第三个砝码开始,所有砝码均大于其前两个砝码之和,问怎样的砝码组合才可以组合出不大于c的最大重量,输出该重量 输入: 第一行输入两个个整数N,c,代表有N个 ...
- BFS 马的遍历————洛谷p1443
马的遍历 题目描述 有一个 \(n \times m\) 的棋盘,在某个点 \((x, y)\) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步. 输入格式 输入只有一行四个整数,分别为 ...
- 让人眼前一亮的开源项目「GitHub 热点速览」
时隔两周,我又带着让人眼前一亮的开源项目回来了! 告别数据线.蓝牙.WiFi 和网络,只需用手机的摄像头扫描一张动图条形码(需安装应用),就能在设备间传输文件的 libcimbar,一款无需联网和蓝牙 ...
- CodeMaid:一款基于.NET开发的Visual Studio代码简化和整理实用插件
前言 今天大姚给大家分享一款由.NET开源.免费.强大的Visual Studio代码简化.整理.格式化实用插件:CodeMaid. 工具介绍 CodeMaid是一款由.NET开源.免费.强大的Vis ...
- PHP运算符优先级(摘自在线工具)
PHP运算符优先级 结合方向 运算符 附加信息 非结合 clone new clone 和 new 左 [ array() 非结合 ++ -- 递增/递减运算符 非结合 ~ - (int) (floa ...
- USB configfs与USB functionfs的区别及关系
configfs 和 functionfs 是 Linux 内核中用于配置和管理 USB 设备行为的两种不同的文件系统,它们各自的用途和工作方式有所不同,但在 USB Gadget 子系统中可以结合使 ...