写在前面的话
SonarQube 这个服务有些人熟悉,有些人陌生。对于我们这样的运维人员,我们需要了解的是,SonarQube 是一个代码质量管理平台,懂得怎么安装配置,这其实就差不多足够了。我们在 Jenkins 这里专门提到这个东西,其原因就在于 Jenkins 有这么个插件,这个插件还被相当多的公司用到。所以得提出了聊聊他。
SonarQube 的安装
目前这样的服务大多都已经提供了 docker 安装的方式,如果你对于 docker 很熟悉且你本身在使用,那么你可以使用。我这里还是使用比较传统的方法运行它。
下载地址:
我当前下载的是官网最新的社区版:7.8
1. 由于 Sonar 的运行需要依赖于 JDK,所有我们可以将 JDK 加入环境变量:
echo 'export JAVA_HOME=/data/jdk8 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile # 生效 source /etc/profile
此时通过 java -version 是可以看到 JDK 版本信息的:
2. 将 sonar 解压:
cd /data/ unzip sonarqube-7.8.zip ln -s sonarqube-7.8 sonar mv sonarqube-7.8.zip /tmp/
此时在 /data 目录下 sonar 目录就是我们的服务目录。
3. 由于是 Java 服务,所有 sonar 其实是跨平台的,我们是 linux 的机器,所以找到 linux 的目录:
注意,此时我们并不能直接启动,因为 es 的运行用户不能为 root,所以我们需要修改权限启动:
# 添加用户,修改目录权限 useradd sonar cd /data/ chown -R sonar.sonar sonar chown -R sonar.sonar sonarqube-7.8 # 切换用户启动 su - sonar cd /data/sonar/bin/linux-x86-64/ ./sonar.sh console
结果如下:
这就是启动完成的标识,我们需要知道的是,Sonar 默认运行在 9000 端口,我们可以访问网页查看:
4. 但作为生产访问,这样配置是不够的,我们需要增加数据库连接配置,这里以 MySQL 为例:
我们在另外一台机的 MySQL 数据库新建了一个名为 sonar 的数据库,并授权给用户 sonar,密码也是 sonar。
由于刚刚我们 console 调试模式启动的,所以 ctrl + C 就可以停止服务。
此时需要去修改 sonar 的配置文件:/data/sonar/conf/sonar.properties
如果你非常熟悉 Java 服务你就会觉得很简单,就是 Java 的 JDBC 配置,系统默认注释了,需要放开,我这里的配置如下:
sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url=jdbc:mysql://192.168.10.204:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
我们也可以在该配置文件中配置其他,例如运行端口:sonar.web.port=9000
5. 再度启动 Sonar:
此时我们发现 sonar 启动会报错:
解决办法:
切换到 root 用户,修改配置:
# 配置 sysctl -w vm.max_map_count=262144 # 查看 sysctl -a | grep vm.max_map_count # 永久生效 echo 'vm.max_map_count=262144' >> /etc/sysctl.conf
切换会 sonar 用户,再度重启,由于此次重启会初始化一些数据到我们刚刚配置的数据库,所以第一次比较耗时。
你可以连接到数据库查看生成情况,但是我当前的版本存在 BUG,需要手动执行一个 SQL:
insert into schema_migrations values (2128);
否则 sonar 无法启动,在初始化数据的时候会报错。
执行完成后重启 sonar 访问修复:
之后如果卡在 Sonar 正在重启中的页面,可以去服务器执行:
./sonar.sh restart
结果:
默认初始账户:admin / admin
中文汉化:
安装完成后按照提示重启!