sonarqube 官网
1. 什么是 Sonarqube?
简单来说就是一个静态代码扫描平台.Sonarqube 有五大特性,分别为 Continuous Inspection,Detect Tricky Issues,Multi-Language,DevOps Integration,Centralize Quality,如图 1 所示.
图 1 Sonarqube 特性. png
对于这五大特性,其中又包含不同的小特性,如图 2 所示.如需了解 Sonarqube 每种特性是做什么的,请访问 Sonarqube 官网 .
图 2 Sonarqube 的小特性 1.png
我们初步来看看 Multi-Language 这个特性,Sonarqube 它支持超过 20 种编程语言,如图 3 所示.
图 3 Sonarqube 支持超过 20 种编程语言
2.IDEA 与 Jenkins 中对应的 Sonarqube 插件介绍
在 IDEA 上有相关 Sonarqube 的插件,主要是 SonarLint 和 SonarQube Community Plugin,如图 4 所示.笔者主要使用的是 SonarLint 这个插件,如若想详细了解 SonarLint 插件,请访问 SonarLint 相关网页 .
图 4 IEAD 上 Sonarqube 相关的插件
当然,Sonarqube 也支持当前最火的持续集成工具 Jenkins.在 Jenkins 中常用的 Sonarqube 插件主要就是 SonarQube Scanner for Jenkins,如图 5 所示.
图 5 Jenkins 中常用的 Sonarqube 插件
3.Sonarqube 支持的平台和数据库
Sonarqube 支持的平台有 Windows,Max OS,Liunx 和 Docker 等,支持的数据库有 Mysql,PostgreSQL,Oracle,SQLServer 等,如图 6 所示.下载 Sonarqube 安装文件,请点击访问 Sonarqube 官网的 Download 页面 ;目前,官网提供的 Sonarqube 安装文件是一个 ZIP 的压缩包.
图 6 Sonarqube 支持的平台和数据库
4.Docker 下安装 Sonarqube
由于,在 Windows,Mac OS,Linux 平台搭建相对比较复杂.笔者选用 Docker 方式进行 Sonarqube 环境的搭建操作.
【PS】笔者使用的 Linux 为 Ubuntu Server 16.04.3
4.1 Sonarqube 镜像的搜索
对于 Docker 相关镜像的搜索,主要分为两种方式,在 Docker Hub 网页中搜索和使用命令 #docker search 镜像名.
【方式 1】在 Docker Hub , 你可以搜索到 Sonarqube 官方提供的 Docker Images ,如图 7 所示.
图 7 Docker Hub 上的 Sonarqube 官方镜像
【方式 2】使用 #docker search sonarqube 进行 sonarqube 相关 Images 的搜索操作;其中,标记为 OFFICIAL 为官方提供的镜像,如图 8 所示.
图 8 docker search sonarqube 进行 sonarqube 相关 Images 的搜索操作
#Code
#docker search搜索sonarqube相关镜像
docker search sonarqube
4.2 Sonarqube 镜像的 Pull
笔者使用的 Docker 是安装在 VM 虚拟机上的 Ubuntu Server 16.0.4.3,你可以通过命令# docker pull sonarqube 将远程镜像仓库中的 sonarqube 镜像 pull 拉取到本地.对于 docker pull 镜像,下载慢的问题,你可以使用 阿里 docker 加速器 或者 使用 daocloud 提供的 docker 加速器 .
4.3 Sonarqube 镜像的 Run 运行
#Code
#docker pull拉取sonarqube镜像
docker pull sonarqube
在 Docker Hub 的 Sonarqube 页面 中,官方给出了如何使用 Sonarqube 镜像的方式,如图 9 所示.
图 9 Sonarqube 镜像的运行方式
使用基本的 Run 方式后,Sonarqube 页面如图 10 所示.
图 10 Sonarqube 基本 Run 方式后的页面
#Sonarqube基本Run方式
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube
从图 10,我们可以得知 "基本的 Run 方式" 是使用内嵌数据库.缺点是内嵌数据库只能用于测试场景,内嵌数据库无法扩展,也无法升级到新版本的 SonarQube,并且不能支持将你的数据迁移至其他数据库引擎.
[建议] 采用图 9 中的 "关联外部数据库 Run" 的方式来使用 Sonarqube,笔者推荐采用 "Sonarqube+PostgreSQL" 这样的组合方式.
5. 对 Sonarqube 官方镜像进行改造
对于,Sonarqube 官方的 Docker 镜像需要说明的是,镜像版本更新为最新的 V6.7.1, 默认语言为英文,镜像系统是基于 Debian9, 系统登录端口为 9000,系统登录的用户名和密码均为 admin, 数据库的登录连接用户名,密码和数据库名均为 sonar.
序号 改造项 改造后的属性值
1 默认语言设置 中文
2 系统的镜像源 阿里的 Debian
3 缺失一些常用工具 (安装)wget,curl,vim,lrzsz
4 默认时区 Aisa/ShangHai
笔者在 Sonarqube 官方 Docker Images 的基础上,结合下述改造点对 Image 进行修改,最后 docker commit 到 Docker Hub 中. 笔者修改后的 Sonarqube 镜像,请访问笔者 Docker Hub 相关页面 , 如图 11 所示.
图 11 笔者改造后的 Sonarqube 镜像页面
6.docker-compose 启动 sonarqube 的 yml 文件详情
postgres_sonarqube.yml 文件地址
7.yml 文件的使用方式
#这是一个利用docker-compose来构建【sonarqube6.7+PostgreSQL】环境的yml文件
#sonarqube6.7的登录用户和密码均为admin,登录页面port为9000.
#PostgreSQL数据库的用户和密码均为sonar[可以在浏览器输入ip+8088或navicat工具访问数据库].
#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------
version: "3.3"
services:
db:
image: postgres
container_name: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
adminer:
image: adminer
restart: always
ports:
- 8088:8080
sonarqube6.7:
image: jamesz2011/sonarqube6.7:latest
container_name: sonarqube
ports:
- "9000:9000"
- "9092:9092"
volumes:
- /etc/localtime:/etc/localtime:ro
links:
- db
environment:
- SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
命令:# docker-compose f postgres_sonarqube.yml up.整个启动过程可能需要超过 10 分钟,请耐心等待.
【建议】 使用 #docker-compose -f postgres_sonarqube.yml up 的方式启动,如图 12 所示.
CODE
#docker-compose启动postgres_sonarqube.yml
docker-compose -f postgres_sonarqube.yml up #不加-d参数能看到docker-compose运行的日志信息
#或
docker-compose -f postgres_sonarqube.yml up -d #加-d参数,在后台运行,不能看到docker-compose运行的日志信息
图 12
8.docker-compose 成功启动的标志
如果,docker-compose 执行 yml 文件无误,可见到成功后的 Sonarqube 页面,如图 13 所示.Sonarqube 登录页面的用户名和密码均为 admin.
图 13 Sonarqube 页面
笔者中 postgres_sonarqube.yml 文件中还添加了一个叫 adminer 的镜像,你可以通过 8088 端口在浏览器上访问操作 Postgres 数据库,如图 14 所示.
图 14 使用端口 8088 网页访问 Postgres 数据库
如果,你不喜欢在网页上操作数据库,你也可以使用 Navicat for PostgreSQL 工具进行相关操作,下表是 Postgres 数据库远程连接的相关配置信息.
Postgres 数据库远程连接 属性
用户名 sonar
密码 sonar
端口号 5432
sonarqube 使用的数据库名 sonar
9. 一键启动 Sonarqube 环境的 Shell 脚本文件
9.1.Shell 脚本文件内容
Shell 脚本属性 值
名称 ifSonarqube.sh
地址 https://github.com/jamesz2011/sonarqube/blob/master/ifSonarqube.sh
9.2.Shell 脚本文件用法:
#此脚本---用来一键启动Sonarqube环境
#----------------------------------------------------------
#判断是否存在Sonarqube环境是否启动
docker ps | grep sonarqube postgres &> /dev/null
#如果没有启动,使用docker-compose启动相关的sonarqube容器
if [ $? -ne 0 ]
then
echo "sonarqube is not up,we will start up it!!!"
wget https://github.com/jamesz2011/sonarqube/raw/master/postgres_sonarqube.yml
docker-compose -f postgres_sonarqube.yml up -d
else
echo "Sonarqube is up!!!"
fi
echo "---------------------------------------------------------"
echo "请等待10分钟,sonarqube环境有点费时间!!!"
echo "----------------------------------------------------------"
本文 END, 请尽情使用 Sonarqube 吧.
wget https://github.com/jamesz2011/sonarqube/raw/master/ifSonarqube.sh
sudo chmod a+x ifSonarqube.sh
sudo apt-get update && apt-get install -y dos2unix
sudo dos2unix ifSonarqube.sh
sudo source ifSonarqube.sh
来源: http://www.jianshu.com/p/194a86df8e17