1. 资源规划

组件 cicd-server-1 cicd-test-2 cicd-prod-3
OS redhat-8.2 redhat-8.2 redhat-8.2

2. 安装介质

版本:sonarqube-7.8.zip
下载:https://binaries.sonarsource.com/Distribution/sonarqube/

3. 环境准备

  • 安装RedHat

参考:《Vagrant-安装RedHat-8.2》

  • 安装**JDK(v1.8+)**

参考:《RedHat-安装JDK-1.8.221》。

  • 安装MySQL(MySQL >=5.6 && <8.0,**从sonarQube-7.9版本开始,将不再支持MySQL**)

参考:《RedHat-安装MySQL-5.7.30》。

  • 内存需求

SonarQube的小型实例至少需要4G内存,如果大型实例需要16GB。

4. 安装sonarQube

  1. sudo mkdir -p /usr/local/sonar
  2. cd /usr/local/sonar
  3. wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.8.zip
  4. unzip sonarqube-7.8.zip
  5. sudo rm -rf sonarqube-7.8.zip

5. 配置sonarQube

  • 新增用户

由于sonar是不允许root用户情况下运行的,因此需要先创建一个非root用户。

  1. sudo useradd sonar
  2. sudo passwd sonar
  3. sudo chown -R sonar:sonar /usr/local/sonar
  • 用户权限配置(选)

    1. sudo chmod u+w /etc/sudoers
    2. sudo vi /etc/sudoers

    内容如下:

    1. # 在root后追加sonar
    2. sonar ALL=(ALL) ALL

    复原权限:

    1. sudo chmod u-w /etc/sudoers
  • 初始化库表

    1. -- mysql -uroot -p123456
    2. CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
    3. CREATE USER 'sonar'@'localhost' IDENTIFIED BY 'sonar';
    4. CREATE USER 'sonar'@'127.0.0.1' IDENTIFIED BY 'sonar';
    5. flush privileges;
    6. grant all privileges on sonar.* to sonar@localhost identified by 'sonar';
    7. grant all privileges on sonar.* to sonar@'127.0.0.1' identified by 'sonar';
    8. grant all privileges on sonar.* to sonar@'192.168.56.101' identified by 'sonar';
    9. grant all privileges on sonar.* to sonar@'192.168.56.1' identified by 'sonar';
    10. flush privileges;
    11. quit

    修改数据配置:

    1. sudo vi /usr/local/sonar/sonarqube-7.8/conf/sonar.properties

    内容如下: ``` sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false sonar.jdbc.username=root sonar.jdbc.password=123456 sonar.sorceEncoding=UTF-8 sonar.login=admin sonar.password=admin

sonar.web.host=0.0.0.0 sonar.web.port=7084 # 默认9000

  1. - **ES配置**
  2. ```bash
  3. sudo vi /etc/sysctl.conf

内容如下:

  1. vm.max_map_count=262144

生效配置:

  1. sysctl -p

修改线程限制数:

  1. sudo vi /etc/security/limits.conf

内容如下:

  1. sonar hard nofile 65536
  2. sonar soft nofile 65536
  • MySQL配置
    1. sudo vi /etc/my.cnf
    内容如下: ```bash innodb_log_file_size=640M

修改最大包的传输

mysql -uroot -p123456

方式1

max_allowed_packet = 50M

方式2

mysql>> show VARIABLES like ‘%max_allowed_packet%’; mysql>> set global max_allowed_packet = 5010241024*10;

  1. - **防火墙开放端口****(若防火墙关闭则无需下述操作)**
  2. ```bash
  3. # 查看firewall的状态
  4. sudo firewall-cmd --state
  5. # 查看防火墙状态(RedHat7之前的版本,防火墙默认采用firewall)
  6. sudo service iptables status
  7. # 查看firewall服务状态
  8. sudo systemctl status firewalld
  9. # 开放端口
  10. sudo firewall-cmd --zone=public --permanent --add-port=7084/tcp
  11. # 关闭端口
  12. sudo firewall-cmd --remove-port=7084/tcp --permanent
  13. # 重新加载防火墙
  14. sudo firewall-cmd --reload
  15. # 查看防火墙端口开放情况
  16. sudo firewall-cmd --list-all

6. 服务启停

  1. 启停服务。 ```bash

    切换用户

    su - sonar cd /usr/local/sonar/sonarqube-7.8/bin

    进入对应的系统

    cd linux-x86-64

启动

./sonar.sh console # 打印终端信息方式启动,不会到后台,调试问题使用 ./sonar.sh start # 以服务方式启动,会到后台,正式生产上用

停止

./sonar.sh stop

重启

./sonar.sh restart

查看状态

./sonar.sh status

重启(切换用户并重启服务)

su - sonar -c “/usr/local/sonar/sonarqube-7.8/bin/linux-x86-64/sonar.sh restart”

  1. 2. 启停脚本。
  2. ```bash
  3. sudo vi /etc/systemd/system/sonar.service

内容如下:

  1. ExecStatus=/usr/local/sonar/sonarqube-7.8/bin/linux-x86-64/sonar.sh status
  2. ExecRestart=/usr/local/sonar/sonarqube-7.8/bin/linux-x86-64/sonar.sh restart
  3. [Unit]
  4. Description=SonarQube service
  5. After=syslog.target network.target
  6. [Service]
  7. Type=forking
  8. ExecStart=/usr/local/sonar/sonarqube-7.8/bin/linux-x86-64/sonar.sh start
  9. ExecStop=/usr/local/sonar/sonarqube-7.8/bin/linux-x86-64/sonar.sh stop
  10. User=sonar
  11. Group=sonar
  12. Restart=always
  13. [Install]
  14. WantedBy=multi-user.target

服务启停:

  1. # 启停服务
  2. sudo systemctl enable sonar
  3. sudo systemctl start sonar
  4. sudo systemctl stop sonar
  5. sudo systemctl restart sonar
  6. sudo systemctl status sonar
  7. # 修改服务配置后,需要重新加载
  8. sudo systemctl daemon-reload

7. 验证

  1. Web UI登录验证。http://bocom.com:7084 (admin/admin)

注意:当出现“SonarQube is under maintenance”提示时,需要进行“setup”:http://bocom.com:7084/setup

  1. 查看日志。

    1. cd /usr/local/sonar/sonarqube-7.8/logs
    2. tail -200f sonar.log

    8. 汉化(选)

    注意:根据兼容性版本选择汉化包版本。
    image.png

  2. 在线汉化。

点击界面上的“Adminstration”,然后选择“Marketplace”,在“Plugins”一栏,搜索“Chinese Pack”,然后点击insatll进行安装。安裝完成以后,重启服务。

  1. 离线汉化。

下载汉化包并上传至“${SONARQUBE_HOME}/extensions/plugins”,之后重启服务。

9. 问题

  1. 报错:“SonarQube is down”->“Unknown column ‘submitter_login’ in ‘ce_activity’”。

解决方案:

  1. # 1. 排查日志报错信息
  2. cd /usr/local/sonar/sonarqube-7.8/logs/access.log
  3. cd /usr/local/sonar/sonarqube-7.8/logs/ce.log
  4. cd /usr/local/sonar/sonarqube-7.8/logs/es.log
  5. cd /usr/local/sonar/sonarqube-7.8/logs/sonar.log
  6. cd /usr/local/sonar/sonarqube-7.8/logs/web.log
  7. # 2. 定位错误
  8. # 'Rename SUBMITTER_LOGIN TO SUBMITTER_UUID on table CE_ACTIVITY'...
  9. # 3. 处理错误
  10. mysql -uroot -p123456
  11. mysql>> use sonar;
  12. mysql>> alter table CE_ACTIVITY change column SUBMITTER_UUID SUBMITTER_LOGIN varchar(255);

参考

语雀:Sonar的搭建
https://www.yuque.com/minicloud/arch/orgg1t
语雀:GitLab集成Sonar
https://www.yuque.com/moxikr/vuets/cpgfca
语雀:开启GitLab runner
https://www.yuque.com/xuanxuan-yybvk/gwq5iv/qh0wa3
语雀:安装Sonar
https://www.yuque.com/charon-nsjtq/zbziy3/yvl02l
语雀:sonarQube持续集成实践(三)
https://www.yuque.com/ssebankops/vw62is/tz4aew
语雀:Java+Maven的工程运行Sonar的方式
https://www.yuque.com/hailongchen/valleyfloor/qhge2g
语雀:CentOS7下安装sonarQube7.9
https://www.yuque.com/chery/life_centos7/qbw5ta
语雀:Jenkins+Sonar+Jacoco
https://www.yuque.com/minicloud/arch/qh17gq