Jenkins之sonarqube
1、docker安装jenkins
[root@localhost ~]# mkdir /var/lib/jenkins [root@localhost ~]# docker run --privileged -d -p 9090:8080 -p 50000:50000 -v /var/lib/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock://var/run/docker.sock -u root --restart=always --name=jenkins jenkins/jenkins
初始化后:

2、安装java环境需要的编译工具maven:

配置好之后,不会立即安装,pipeline调用后,才会下载后安装:
pipeline { agent any tools { maven 'maven' // 与全局工具配置中Name一致 } stages { stage('拉取代码') { steps { git( branch: 'main', credentialsId: "gitlab-pass", url: "http://192.168.213.20:9080/root/springboot-manager.git" ) } } stage('项目构建') { steps { sh "${tool 'maven'}/bin/mvn -v" } } } }
查看build记录:

可以查看到maven的安装目录:
[root@localhost ~]# docker exec -it jenkins /bin/bash root@82dd2453561d:/# /var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven/bin/mvn -v Apache Maven 3.9.10 (5f519b97e944483d878815739f519b2eade0a91d) Maven home: /var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven Java version: 21.0.7, vendor: Eclipse Adoptium, runtime: /opt/java/openjdk Default locale: en, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
由于docker安装的Jenkins,默认安装的jdk版本是21,如果java代码编译需要jdk1.8那么需要安装jdk1.8,结合maven进行编译构建:
宿主机安装jdk1.8:
[root@localhost ~]# yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64
将宿主机jdk环境更新:
[root@localhost ~]# java -version java version "17.0.13" 2024-10-15 LTS Java(TM) SE Runtime Environment (build 17.0.13+10-LTS-268) Java HotSpot(TM) 64-Bit Server VM (build 17.0.13+10-LTS-268, mixed mode, sharing) [root@localhost ~]# update-alternatives --config java There are 2 programs which provide 'java'. Selection Command ----------------------------------------------- *+ 1 /usr/lib/jvm/jdk-17.0.13-oracle-x64/bin/java 2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/bin/java) Enter to keep the current selection[+], or type selection number: 2 [root@localhost ~]# java -version openjdk version "1.8.0_412" OpenJDK Runtime Environment (build 1.8.0_412-b08) OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)
将宿主机的jdk1.8挂载到容器或者:
[root@localhost ~]# cp -a /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 /var/lib/jenkins/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 [root@localhost ~]# /var/lib/jenkins/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/bin/java -version openjdk version "1.8.0_412" OpenJDK Runtime Environment (build 1.8.0_412-b08) OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)
或者:
[root@jenkins test1]# docker run --privileged -d -p 9090:8080 -p 50000:50000 -v /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 -v /var/lib/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock://var/run/docker.sock -u root --restart=always --name=jenkins jenkins/jenkins
这里选择第一种:
然后配置java tool:

然后更新pipeline,进行调用jdk:
pipeline {
agent any
tools {
maven 'maven' // 与全局工具配置中Name一致
jdk 'jdk1.8'
}
stages {
stage('拉取代码') {
steps {
git(
branch: 'main',
credentialsId: "gitlab-pass",
url: "http://192.168.213.20:9080/root/springboot-manager.git"
)
}
}
stage('项目构建') {
steps {
sh "${tool 'maven'}/bin/mvn -v"
}
}
}
}
查看输出maven调用的jdk版本:

3、部署sonarqube服务:https://docs.sonarsource.com/sonarqube-server/latest/try-out-sonarqube/
这里选择docker部署:
[root@localhost ~]# docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
浏览器访问:http://192.168.213.100:9000/
默认账号密码都是admin

创建一个project:



Jenkins调用sonarqube需要用到token,创建token:

这里使用管理员账号创建token:


将这里创建的token保存到Jenkins的credentials:

Jenkins安装SonarQube Scanner插件:

还需要安装 SonarQube Scanner命令:

还需要配置sonarqube服务器信息:

然后更新pipeline添加代码扫描:
pipeline {
agent any
tools {
maven 'maven' // 与全局工具配置中Name一致
jdk 'jdk1.8'
}
environment {
SONARQUBE_SERVER_NAME = 'sonarqubeserver'
}
stages {
stage('拉取代码') {
steps {
git(
branch: 'main',
credentialsId: "gitlab-pass",
url: "http://192.168.213.20:9080/root/springboot-manager.git"
)
}
}
stage('项目构建') {
steps {
sh "${tool 'maven'}/bin/mvn -s settings.xml -B -DskipTests clean package"
}
}
stage('代码质量分析') {
steps {
script {
scannerHome = tool 'SonarQubeScanner' //调用tool配置的SonarQubeScanner客户端
}
withSonarQubeEnv("${SONARQUBE_SERVER_NAME}") {
sh "${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=springbootdemo -Dsonar.projectName=springbootdemo -Dsonar.language=java -Dsonar.java.binaries=target/"
}
}
}
}
}
构建流程解析:下载代码,mvn构建编译java代码生成应用jar包,通过sonarqube工具进行代码以及jar包扫描:

出现了这个报错,而这个文件是/usr/share/javazi-1.8/tzdb.dat文件的链接,所以修改之前的配置:
[root@localhost ~]# docker run --privileged -d -p 9090:8080 -p 50000:50000 -v /usr/share/javazi-1.8/tzdb.dat:/usr/share/javazi-1.8/tzdb.dat -v /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 -v /var/lib/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock://var/run/docker.sock -u root --restart=always --name=jenkins jenkins/jenkins
将-v /usr/share/javazi-1.8/tzdb.dat:/usr/share/javazi-1.8/tzdb.dat -v /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64这两个都用挂载的方式进行在docker Jenkins里面进行使用
而maven也通过手动进行压缩包配置:
[root@localhost ~]# tar xf apache-maven-3.9.9-bin.tar.gz -C /var/lib/jenkins/
修改tool的配置:


更新pipeline如下:
pipeline {
agent any
tools {
maven 'maven' // 与全局工具配置中Name一致
jdk 'jdk'
}
environment {
SONARQUBE_SERVER_NAME = 'sonarqubeserver'
}
stages {
stage('拉取代码') {
steps {
git(
branch: 'main',
credentialsId: "gitlab-pass",
url: "http://192.168.213.20:9080/root/springboot-manager.git"
)
}
}
stage('项目构建') {
steps {
sh "${tool 'maven'}/bin/mvn -v"
sh "${tool 'maven'}/bin/mvn -s settings.xml -f pom.xml -U clean package -Dmaven.test.skip=true"
}
}
stage('代码质量分析') {
steps {
script {
scannerHome = tool 'SonarQubeScanner' //调用tool配置的SonarQubeScanner客户端
}
withSonarQubeEnv("${SONARQUBE_SERVER_NAME}") {
sh "${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=springbootdemo -Dsonar.projectName=springbootdemo -Dsonar.language=java -Dsonar.java.binaries=target/"
}
}
}
}
}
执行构建:
docker Jenkins安装的jdk17和tool配置的jdk8进行构建总会出现问题,以下解决方案:
[root@localhost ~]# docker run --privileged -d -p 9090:8080 -p 50000:50000 -v /var/lib/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock://var/run/docker.sock -u root --restart=always --name=jenkins jenkins/jenkins
不需要挂载本地jdk8到容器,直接使用docker pipeline插件:
pipeline {
agent any
environment {
SONARQUBE_SERVER_NAME = 'sonarqubeserver'
}
stages {
stage('拉取代码') {
steps {
git(
branch: 'main',
credentialsId: "gitlab-pass",
url: "http://192.168.213.20:9080/root/springboot-manager.git"
)
}
}
stage('maven build') {
agent {
// 需要安装Docker Pipeline插件,才能使用下面这样
docker {
image 'registry.cn-hangzhou.aliyuncs.com/jsonhc/maven:3.5.0-jdk-8-alpine'
args '-v $HOME/.m2:/root/.m2'
reuseNode true
}
}
steps {
script {
sh "mvn -s settings.xml -f pom.xml -U clean package -Dmaven.test.skip=true"
}
}
}
stage('代码质量分析') {
steps {
script {
scannerHome = tool 'SonarQubeScanner' //调用tool配置的SonarQubeScanner客户端
}
withSonarQubeEnv("${SONARQUBE_SERVER_NAME}") {
sh "${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=springbootdemo -Dsonar.projectName=springbootdemo -Dsonar.language=java -Dsonar.java.binaries=target/"
}
}
}
}
}
Jenkins tools对于maven和jdk都可以删掉:不需要配置


通过maven镜像进行提供jdk8环境进行编译java代码,然后生成target应用包:

然后再调用sonarqube进行扫描:

然后sonarqube服务上查看报告:

浙公网安备 33010602011771号