【测试环境】1.使用docker-compose搭建Sonarq
1.什么是Sonarqube?
简单来说就是一个静态代码扫描平台。Sonarqube有五大特性,分别为Continuous Inspection、Detect Tricky Issues、Multi-Language、DevOps Integration、Centralize Quality,如图1所示。
对于这五大特性,其中又包含不同的小特性,如图2所示。如需了解Sonarqube每种特性是做什么的,请访问Sonarqube官网。
图2 Sonarqube的小特性1.png
我们初步来看看Multi-Language这个特性,Sonarqube它支持超过20种编程语言,如图3所示。
2.IDEA与Jenkins中对应的Sonarqube插件介绍
在IDEA上有相关Sonarqube的插件,主要是SonarLint和SonarQube Community Plugin,如图4所示。笔者主要使用的是SonarLint这个插件,如若想详细了解SonarLint插件,请访问SonarLint相关网页。
当然,Sonarqube也支持当前最火的持续集成工具Jenkins。在Jenkins中常用的Sonarqube插件主要就是SonarQube Scanner for Jenkins,如图5所示。
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所示。
【方式2】使用#docker search sonarqube进行sonarqube相关Images的搜索操作;其中,标记为OFFICIAL 为官方提供的镜像,如图8所示。
#Code
#docker search搜索sonarqube相关镜像
docker search sonarqube
图8 docker search sonarqube 进行sonarqube相关Images的搜索操作
4.2 Sonarqube镜像的Pull
笔者使用的Docker是安装在VM虚拟机上的Ubuntu Server 16.0.4.3,你可以通过命令# docker pull sonarqube将远程镜像仓库中的sonarqube镜像pull拉取到本地。对于docker pull镜像,下载慢的问题,你可以使用阿里docker加速器 或者 使用daocloud提供的docker加速器。
#Code
#docker pull拉取sonarqube镜像
docker pull sonarqube
4.3 Sonarqube镜像的Run运行
在Docker Hub的Sonarqube页面中,官方给出了如何使用Sonarqube镜像的方式,如图9所示。
使用基本的Run方式后,Sonarqube页面如图10所示。
#Sonarqube基本Run方式
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube
图10 Sonarqube基本Run方式后的页面
从图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所示。
6.docker-compose启动sonarqube的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
7.yml文件的使用方式
命令:# docker-compose f postgres_sonarqube.yml up。整个启动过程可能需要超过10分钟,请耐心等待。
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运行的日志信息
【建议】 使用 #docker-compose -f postgres_sonarqube.yml up 的方式启动,如图12所示。
8.docker-compose成功启动的标志
如果,docker-compose执行yml文件无误,可见到成功后的Sonarqube页面,如图13所示。Sonarqube登录页面的用户名和密码均为admin。
笔者中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 |
#此脚本---用来一键启动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
docker-compose -f postgres_sonarqube.yml up
else
echo "Sonarqube is up!!!"
fi
echo "---------------------------------------------------------"
echo "请等待10分钟,sonarqube环境有点费时间!!!"
echo "----------------------------------------------------------"
9.2.Shell脚本文件用法:
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
本文END,请尽情使用Sonarqube吧。