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服务上查看报告:

 

posted on 2025-07-13 19:17  wadeson  阅读(18)  评论(1)    收藏  举报