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
- 安装**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
sudo mkdir -p /usr/local/sonar
cd /usr/local/sonar
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.8.zip
unzip sonarqube-7.8.zip
sudo rm -rf sonarqube-7.8.zip
5. 配置sonarQube
- 新增用户
由于sonar是不允许root用户情况下运行的,因此需要先创建一个非root用户。
sudo useradd sonar
sudo passwd sonar
sudo chown -R sonar:sonar /usr/local/sonar
用户权限配置(选)
sudo chmod u+w /etc/sudoers
sudo vi /etc/sudoers
内容如下:
# 在root后追加sonar
sonar ALL=(ALL) ALL
复原权限:
sudo chmod u-w /etc/sudoers
初始化库表
-- mysql -uroot -p123456
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar'@'localhost' IDENTIFIED BY 'sonar';
CREATE USER 'sonar'@'127.0.0.1' IDENTIFIED BY 'sonar';
flush privileges;
grant all privileges on sonar.* to sonar@localhost identified by 'sonar';
grant all privileges on sonar.* to sonar@'127.0.0.1' identified by 'sonar';
grant all privileges on sonar.* to sonar@'192.168.56.101' identified by 'sonar';
grant all privileges on sonar.* to sonar@'192.168.56.1' identified by 'sonar';
flush privileges;
quit
修改数据配置:
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
- **ES配置**
```bash
sudo vi /etc/sysctl.conf
内容如下:
vm.max_map_count=262144
生效配置:
sysctl -p
修改线程限制数:
sudo vi /etc/security/limits.conf
内容如下:
sonar hard nofile 65536
sonar soft nofile 65536
- MySQL配置
内容如下: ```bash innodb_log_file_size=640Msudo vi /etc/my.cnf
修改最大包的传输
mysql -uroot -p123456
方式1
max_allowed_packet = 50M
方式2
mysql>> show VARIABLES like ‘%max_allowed_packet%’; mysql>> set global max_allowed_packet = 5010241024*10;
- **防火墙开放端口****(若防火墙关闭则无需下述操作)**
```bash
# 查看firewall的状态
sudo firewall-cmd --state
# 查看防火墙状态(RedHat7之前的版本,防火墙默认采用firewall)
sudo service iptables status
# 查看firewall服务状态
sudo systemctl status firewalld
# 开放端口
sudo firewall-cmd --zone=public --permanent --add-port=7084/tcp
# 关闭端口
sudo firewall-cmd --remove-port=7084/tcp --permanent
# 重新加载防火墙
sudo firewall-cmd --reload
# 查看防火墙端口开放情况
sudo firewall-cmd --list-all
6. 服务启停
启动
./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”
2. 启停脚本。
```bash
sudo vi /etc/systemd/system/sonar.service
内容如下:
ExecStatus=/usr/local/sonar/sonarqube-7.8/bin/linux-x86-64/sonar.sh status
ExecRestart=/usr/local/sonar/sonarqube-7.8/bin/linux-x86-64/sonar.sh restart
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/usr/local/sonar/sonarqube-7.8/bin/linux-x86-64/sonar.sh start
ExecStop=/usr/local/sonar/sonarqube-7.8/bin/linux-x86-64/sonar.sh stop
User=sonar
Group=sonar
Restart=always
[Install]
WantedBy=multi-user.target
服务启停:
# 启停服务
sudo systemctl enable sonar
sudo systemctl start sonar
sudo systemctl stop sonar
sudo systemctl restart sonar
sudo systemctl status sonar
# 修改服务配置后,需要重新加载
sudo systemctl daemon-reload
7. 验证
- Web UI登录验证。http://bocom.com:7084 (admin/admin)
注意:当出现“SonarQube is under maintenance”提示时,需要进行“setup”:http://bocom.com:7084/setup。
点击界面上的“Adminstration”,然后选择“Marketplace”,在“Plugins”一栏,搜索“Chinese Pack”,然后点击insatll进行安装。安裝完成以后,重启服务。
- 离线汉化。
下载汉化包并上传至“${SONARQUBE_HOME}/extensions/plugins”,之后重启服务。
9. 问题
- 报错:“SonarQube is down”->“Unknown column ‘submitter_login’ in ‘ce_activity’”。
解决方案:
# 1. 排查日志报错信息
cd /usr/local/sonar/sonarqube-7.8/logs/access.log
cd /usr/local/sonar/sonarqube-7.8/logs/ce.log
cd /usr/local/sonar/sonarqube-7.8/logs/es.log
cd /usr/local/sonar/sonarqube-7.8/logs/sonar.log
cd /usr/local/sonar/sonarqube-7.8/logs/web.log
# 2. 定位错误
# 'Rename SUBMITTER_LOGIN TO SUBMITTER_UUID on table CE_ACTIVITY'...
# 3. 处理错误
mysql -uroot -p123456
mysql>> use sonar;
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