Jenkins-SonarQube代码检测

Jenkins-SonarQube代码检测

Deng YongJie's blog 448 2022-07-02

第1章 安装SonarQube

1.安装java环境

yum install java -y

2.解压并创建软链接

unzip sonarqube-7.0.zip -d /opt/
ln -s /opt/sonarqube-7.0/ /opt/sonarqube

3.创建普通⽤户并更改授权

useradd sonar -M -s /sbin/nologin
chown -R sonar.sonar /opt/sonarqube*

4.配置sonarqube数据库连接信息

[root@sonar ~]# vim /opt/sonarqube/conf/sonar.properties
sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

5.指定sonarqube启动⽤户

vim /opt/sonarqube/bin/linux-x86-64/sonar.sh
RUN_AS_USER=sonar

6.创建sonarqube数据库

mysql -uroot -p123456 -e 'create database sonar default character set utf8;'
mysql -uroot -p123456 -e 'show databases;'

7.编写systemd启动⽂件

cat >/usr/lib/systemd/system/sonar.service<<'EOF'
[Unit]
Description=sonar
[Service]
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
Type=forking
User=sonar
Group=sonar
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload

8.启动SonarQube

systemctl start sonar.service

9.检查服务

[root@sonar ~]# netstat -lntup|grep java
tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN
18202/java
tcp6 0 0 :::9000 :::* LISTEN
18305/java
tcp6 0 0 127.0.0.1:9001 :::* LISTEN
18227/java
tcp6 0 0 127.0.0.1:36949 :::* LISTEN
18475/java

10.启动报错

使⽤systemd启动后失败,查看es⽇志发现提示max file descriptors太低:

[root@sonar /opt/sonarqube/logs]# tail -f /opt/sonarqube/logs/es.log
2020.05.14 09:51:19 INFO es[][o.e.t.TransportService] publish_address
{127.0.0.1:9001}, bound_addresses {127.0.0.1:9001}
2020.05.14 09:51:19 WARN es[][o.e.b.BootstrapChecks] max file descriptors [4096]
for elasticsearch process is too low, increase to at least [65536]
2020.05.14 09:51:19 WARN es[][o.e.b.BootstrapChecks] max virtual memory areas
vm.max_map_count [65530] is too low, increase to at least [262144]

解决⽅法:

echo "vm.max_map_count=262144" >> /etc/sysctl.conf
echo "root - nofile 65536" >> /etc/security/limits.conf
echo "sonar - nofile 65536" >> /etc/security/limits.conf
sysctl -p

第2章 初始化SonarQube

1.使⽤admin登陆

账号密码均为admin

2.⽣成token

在输⼊框内输⼊jenkins,然后点击Generate⽣成token,需要保存好这个tocken,后⾯会⽤到
image-1676454119843

3.选择项⽬类型

image-1676454129225

点击Done之后会给我们⽣成提示信息
image-1676454141222

第3章 安装插件

1.在线安装中⽂插件⽅法

Administration–>Marketplace–>chinese–>install
image-1676454164578

2.离线安装插件⽅法

离线安装的话只需要将插件压缩包解压到指定⽬录然后重启服务即可,解压之前可以先备份插件⽬录

mv /opt/sonarqube/extensions/plugins/ /opt/sonarqube/extensions/plugins_bak
tar xf sonar_plugins.tar.gz -C /opt/sonarqube/extensions/

3.重启服务

systemctl restart sonar.service

4.浏览器访问查看

image-1676454180408

第4章 安装客户端

1.jenkins主机安装客户端

我们需要将jenkins拉取的代码推送到SonarQube,所以需要在jenkins主机上安装sonar客户端:

unzip sonar-scanner-cli-4.0.0.1744-linux.zip -d /opt/
cd /opt/
ln -s sonar-scanner-4.0.0.1744-linux sonar-scanner

写⼊环境变量:

echo 'export PATH=$PATH:/opt/sonar-scanner/bin' >> /etc/profile
source /etc/profile

2.推送代码到SonarQube

进⼊代码⽬录执⾏推送命令

注意:这⾥的推送命令是初始化的时候⽣成的,Dsonar.login的值也是初始化时候⽣成的token

cd /var/lib/jenkins/workspace/h5game/
/opt/sonar-scanner/bin/sonar-scanner \
 -Dsonar.projectKey=html \
 -Dsonar.sources=. \
 -Dsonar.host.url=http://10.0.0.203:9000 \
 -Dsonar.login=4f57dfb332463fa8220be49856a0f1d27c88a142

也可以将服务器相关的命令写⼊配置⽂件⾥,这样推送的命令可以精简⼀些:

vim /opt/sonar-scanner/conf/sonar-scanner.properties
sonar.host.url=http://10.0.0.203:9000
sonar.login=be400d585a529e6e2152e6742fe3f5cb3fc803d2
sonar.sourceEncoding=UTF-8

然后推送命令只需要指定两个选项即可:

cd /var/lib/jenkins/workspace/my-freestyle-job/
sonar-scanner \
 -Dsonar.projectKey=html \
 -Dsonar.sources=.

3.web⻚⾯查看扫描结果

4.执⾏报错解决

报错现象:推送的时候提示我们找不到node环境
image-1676454216651

解决⽅法:在jenkins服务器上安装nodejs环境,然后重新推送就不会再报错了:

cd /opt/
wget https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.xz
tar xf node-v12.13.0-linux-x64.tar.xz
mv node-v12.13.0-linux-x64 node
echo 'export PATH=$PATH:/opt/node/bin' >> /etc/profile
source /etc/profile
npm -v
node -v

第5章 与Jenkins集成

1.配置SonarQube凭证信息

在jenkins⻚⾯进⼊ 系统管理–>系统配置–>找到sonar的配置
image-1676454237646

此时点击添加凭证按钮没有反应,没关系,先保存⼀下,然后回来再添加⼀次即可
image-1676454250148

填写sonar初始化的token信息:
image-1676454261863

添加完成后就可以选择sonar的凭证了:
image-1676454276580

2.配置sonar客户端家⽬录

点击系统管理–>全局⼯具配置–>找到SonarQube Scanner选项:

image-1676454305386

3.⼯程中配置sonar构建选项

添加构建步骤:
image-1676454324576

填写详细信息:
image-1676454334155

填写参数:

sonar.projectName=${JOB_NAME}
sonar.projectKey=html
sonar.sources=.

4.调整构建执⾏顺序

注意!!!这⾥还需要将构建顺序调整⼀下,先执⾏代码扫描,然后再发布版本 可以直接拖动选项块来调整顺序,最终结果如下:

image-1676454356649

5.发布测试

jenkins构建测试

可以使⽤git尝试发布代码,然后查看执⾏是否成功:

git branch
git pull
vim index.html
git add .
git commit -m "v5.0 稳定版"
git push -u origin master

sonar查看是否发布:
image-1676454371449