第一部分:安装

一、Java

SonarQube对Java的要求:

SonarQube部署和配置-Docker方式_软件测试

查看服务器java版本

java -version

SonarQube部署和配置-Docker方式_软件研发_02

二、MySQL

SonarQube对MySQL的要求:

SonarQube部署和配置-Docker方式_软件研发_03

1、安装:

(1)、配置YUM源

在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/

SonarQube部署和配置-Docker方式_软件测试_04SonarQube部署和配置-Docker方式_软件测试_05

(2)下载mysql源安装包

wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

(3)安装mysql源

yum localinstall mysql57-community-release-el7-11.noarch.rpm

(4)检查mysql源是否安装成功

yum repolist enabled | grep "mysql.*-community.*"

(5)安装MySQL

yum install mysql-community-server

如果之前安装CentOS时选择了安装MySQL,则先用yum remove mariadb*卸载掉才能继续安装

2、启动:

service mysqld startsystemctl start mysqld

查看是否启动:

service mysqld statussystemctl status mysqld出现Active: active (running)和PID代表启动成功

SonarQube部署和配置-Docker方式_软件测试_06

得到默认密码:

grep 'temporary password' /var/log/mysqld.log

用root登录进去:

mysql -uroot -p

注意:如果默认密码带有括号,需要在括号前加转义字符:\,否则会提示如下错误

SonarQube部署和配置-Docker方式_软件测试_07

修改默认密码:

mysql> set password for 'root'@'localhost' = password('********');

设置任何IP都可以远程访问MySQL,没有这行的话之后配置数据库会出错

mysql> grant all privileges on *.* to 'root'@'%' identified by '********';

mysql> flush privileges;

创建sonar数据库和对应的sonar用户

mysql> create database sonar character set utf8 collate utf8_bin;

mysql> grant all privileges on sonar.* to 'sonar'@'%' identified by '********';

mysql> flush privileges;

mysql> quit

3、设置开机启动:yum安装的MySQL默认就是服务,可以用systemctl list-unit-files查看,但开机没启动(disabled状态),所以要用systemctl enable mysqld.service激活开机启动,然后systemctl daemon-reload

MySQL默认配置文件路径: 配置文件:/etc/my.cnf 日志文件:/var/log/mysqld.log 服务启动脚本:/usr/lib/systemd/system/mysqld.service socket文件:/var/run/mysqld/mysqld.pid

三、SonarQube

1、拉取SonarQube6.7.5镜像:

https://hub.docker.com/_/sonarqube

这里要拉最新版的:

docker pull sonarqube

SonarQube部署和配置-Docker方式_软件研发_08

2、运行SonarQube

(1)在宿主机上新建目录

mkdir /home/sonarqube/conf

mkdir /home/sonarqube/data

mkdir /home/sonarqube/logs

mkdir /home/sonarqube/extensions

(2)修改上边目录权限

chmod 777 /home/sonarqube –R

(3)运行容器

docker run --name sonarqube -d \

-p 9002:9000 -p 9092:9092 \

-e SONARQUBE_JDBC_USERNAME=sonar \

-e SONARQUBE_JDBC_PASSWORD="********" \

-e SONARQUBE_JDBC_URL="jdbc:mysql://192.168.1.155:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance" \

-v /home/sonarqube/conf:/opt/sonarqube/conf \

-v /home/sonarqube/data:/opt/sonarqube/data \

-v /home/sonarqube/logs:/opt/sonarqube/logs \

-v /home/sonarqube/extensions:/opt/sonarqube/extensions \

sonarqube

说明:

(1)参数解释

-d: 后台运行容器,并返回容器ID;

-p: 端口映射,格式为:主机(宿主)端口:容器端口。-p 9002:9000是将容器9000端口映射为9002,因为宿主9000端口已经被占用

--name=sonarqube: 为容器指定一个名称;

-e设置环境变量,此变量会传递到COMMAND中

(2)错误解决:

必须要用最新版的SonarQube,如果用6.7.5(参数-d sonarqube:6.7.5),虽然运行不报错,但

docker ps -a后发现STATUS是Exited (1)

SonarQube部署和配置-Docker方式_软件研发_09

docker logs <CONTAINER ID>查看日志,报错:

Command-line argument must start with -D, for example -Dsonar.jdbc.username=sonar. Got: -p

SonarQube部署和配置-Docker方式_软件研发_10

对比docker ps –a中的COMMAND,发现错误出现在run.sh,为了方便,在docker-sonarqube对应Github开源页面查看

https://github.com/SonarSource/docker-sonarqube/blob/master/6.7.5/run.sh

没有错误

SonarQube部署和配置-Docker方式_软件研发_11

怀疑国内Docker源下载的镜像有问题,运行最新版的SonarQube没有问题

SonarQube部署和配置-Docker方式_软件研发_12

(3)停止SonarQube命令

docker stop <CONTAINER ID>

docker rm <CONTAINER ID>

第二部分:使用

1、在浏览器中输入

http://192.168.1.155:9002

SonarQube服务运行正常

SonarQube部署和配置-Docker方式_软件测试_13

在接下来的页面中,点击"Log in"按钮

SonarQube部署和配置-Docker方式_软件测试_14

账号:admin

密码:admin

SonarQube部署和配置-Docker方式_软件研发_15

点击"Skip this tutorial"跳过

SonarQube部署和配置-Docker方式_软件测试_16

2、开启登录访问权限

进入配置-权限,开启

Force user authentication

Forcing user authentication stops un-logged users to access SonarQube.

标识: sonar.forceAuthentication

作用是所有页面都只允许登录后访问

SonarQube部署和配置-Docker方式_软件测试_17

一、安装简体中文包

1、依次点击页面:Administration – Marketplcae – All – Chinese Pack(Install)

SonarQube部署和配置-Docker方式_软件研发_18

SonarQube部署和配置-Docker方式_软件测试_19

2、当安装状态变为Install Pending时,点击最上边的Rastart按钮

SonarQube部署和配置-Docker方式_软件测试_20

确认

SonarQube部署和配置-Docker方式_软件测试_21

等待重启

SonarQube部署和配置-Docker方式_软件测试_22

3、页面变成中文,但需要重新登录

SonarQube部署和配置-Docker方式_软件研发_23

二、更新插件

回到应用市场,继续更新其他插件。切记:更新和安装时不要关闭浏览器和重启SonarQube,否则会导致无法启动SonarQube

SonarQube部署和配置-Docker方式_软件测试_24

更新一个插件大概需要半小时,当提示"等待更新"时,点击上方的"重启"按钮。基本每更新一个插件都要重启SonarQube服务一次

SonarQube部署和配置-Docker方式_软件测试_25

如遇到在线更新失败的情况,需手动更新

1、从https://docs.sonarqube.org/display/PLUG/Plugin+Library下载需要的插件

SonarC#、SonarCSS、SonarHTML、SonarJava、SonarJS、SonarTS、SonarXML

SonarQube部署和配置-Docker方式_软件研发_26

2、插件传到宿主机192.168.1.155上

3、用下边的命令插件传到sonarqube 的docker里

命令格式:docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

docker cp sonar-css-plugin-1.0.2.611.jar sonarqube:/opt/sonarqube/extensions/plugins/sonar-css-plugin-1.0.2.611.jar

docker cp sonar-html-plugin-3.0.1.1444.jar sonarqube:/opt/sonarqube/extensions/plugins/sonar-html-plugin-3.0.1.1444.jar

docker cp sonar-java-plugin-5.6.0.15032.jar sonarqube:/opt/sonarqube/extensions/plugins/sonar-java-plugin-5.6.0.15032.jar

docker cp sonar-javascript-plugin-5.0.0.6962.jar sonarqube:/opt/sonarqube/extensions/plugins/sonar-javascript-plugin-5.0.0.6962.jar

docker cp sonar-typescript-plugin-1.8.0.3332.jar sonarqube:/opt/sonarqube/extensions/plugins/sonar-typescript-plugin-1.8.0.3332.jar

docker cp sonar-xml-plugin-1.5.1.1452.jar sonarqube:/opt/sonarqube/extensions/plugins/sonar-xml-plugin-1.5.1.1452.jar

进入docker

docker exec -it 4da3dcf3c046 /bin/bash

进入插件目录

cd /opt/sonarqube/extensions/plugins

ls -l

SonarQube部署和配置-Docker方式_软件测试_27

4、删掉旧版本插件(为了安全,移走对应的旧版插件)

mv sonar-java-plugin-5.2.0.13398.jar /home/

mv sonar-javascript-plugin-4.1.0.6085.jar /home/

mv sonar-typescript-plugin-1.6.0.2388.jar /home/

mv sonar-xml-plugin-1.5.0.1373.jar /home/

SonarQube部署和配置-Docker方式_软件研发_28

保存修改后的容器到新镜像(每次在容器中做过修改都要保存为新镜像,防止意外导致容器无法启动)

docker commit 4da3dcf3c046 sonarqube-xywg

SonarQube部署和配置-Docker方式_软件研发_29

5、重启SonarQube

PS:如果镜像没问题,但某些意外导致容器停止,可以用docker restart <CONTAINER ID>命令再次启动容器

三、创建用户

创建一个普通用户用于做代码质量检测

SonarQube部署和配置-Docker方式_软件测试_30

账号:testing

密码:testing

SonarQube部署和配置-Docker方式_软件测试_31

创建完毕

SonarQube部署和配置-Docker方式_软件测试_32

点击上图testing行、令牌列的SonarQube部署和配置-Docker方式_软件研发_33图标

生成令牌:testing_sonarqube

SonarQube部署和配置-Docker方式_软件研发_34

点击"生成"按钮

复制生成的令牌:bcda4faafae6f34759a898c9766a66ae4c73a441

点击"完成"

SonarQube部署和配置-Docker方式_软件研发_35

四、集成LDAP登录

官方文档:https://docs.sonarqube.org/display/SONARQUBE67/LDAP+Plugin

五、升级SonarQube

1、停止并删除原版本

(1)停止容器

docker stop 4da3dcf3c046

(2)删除容器

docker rm 4da3dcf3c046

(3)删除镜像

docker rmi docker.io/sonarqube

(4)下载新镜像

docker pull sonarqube

2、运行新下载的容器

命令见前章节

3、配置

首次进入http://192.168.1.155:9002/会跳转到http://192.168.1.155:9002/maintenance?return_to=%2F

SonarQube部署和配置-Docker方式_软件研发_36

需要初始化,进入http://192.168.1.155:9002/setup页面按照提示升级数据库

SonarQube部署和配置-Docker方式_软件研发_37

等待操作结束

SonarQube部署和配置-Docker方式_软件测试_38

4、重新操作一遍集成LDAP登录

注意/opt/sonarqube/conf/sonar.properties文件可能不存在,新建一个即可