使用docker-compose搭建SonarQube平台

/ 测试docker / 没有评论 / 2736浏览

sonarqube官网

img

1.什么是Sonarqube?

简单来说就是一个静态代码扫描平台。Sonarqube有五大特性,分别为Continuous Inspection、Detect Tricky Issues、Multi-Language、DevOps Integration、Centralize Quality,如下图1所示。 img 对于这五大特性,其中又包含不同的小特性,如下图2所示。如需了解Sonarqube每种特性是做什么的,请访问[Sonarqube官网]https://www.sonarqube.org/img 我们初步来看看Multi-Language这个特性,Sonarqube它支持超过20种编程语言,如下图3所示。 img

2.IDEA与Jenkins中对应的Sonarqube插件介绍

IDEA上有相关Sonarqube的插件,主要是SonarLintSonarQube Community Plugin,如图4所示。笔者主要使用的是SonarLint这个插件,如若想详细了解SonarLint插件,请访问SonarLint相关网页img

当然,Sonarqube也支持当前最火的持续集成工具Jenkins。在Jenkins中常用的Sonarqube插件主要就是SonarQube Scanner for Jenkins,如下图5所示。 img

3.Sonarqube支持的平台和数据库

Sonarqube支持的平台有Windows、Max OS、Liunx和Docker等,支持的数据库有Mysql、PostgreSQL、Oracle、SQLServer等,如图6所示。下载Sonarqube安装文件,请点击访问Sonarqube官网的Download页面;目前,官网提供的Sonarqube安装文件是一个ZIP的压缩包。 img

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所示。 img

【方式2】使用#docker search sonarqube进行sonarqube相关Images的搜索操作;其中,标记为OFFICIAL 为官方提供的镜像,如图8所示。

#Code
#docker search搜索sonarqube相关镜像
docker search sonarqube

img

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所示。 img 使用基本的Run方式后,Sonarqube页面如图10所示。

#Sonarqube基本Run方式
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube

img

从图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所示。 img

6.docker-compose启动sonarqube的yml文件详情

postgres_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所示。 img

8.docker-compose成功启动的标志

如果,docker-compose执行yml文件无误,可见到成功后的Sonarqube页面,如图13所示。Sonarqube登录页面的用户名和密码均为adminimg 笔者中postgres_sonarqube.yml文件中还添加了一个叫adminer的镜像,你可以通过8088端口在浏览器上访问操作Postgres数据库,如图14所示。 img

如果,你不喜欢在网页上操作数据库,你也可以使用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吧。