jenkins-pipeline集成sonarqube代码扫描

背景:jenkins-pipeline集成sonarqube代码扫描,根据代码检测的状态去判断是否继续执行流水线

环境:

  • Jenkins 2.346.3
  • Sonarqube 8.9.10-community(不要使用7的版本,该版本无自带代码规则,需要离线安装,比较麻烦)
  • sonar-scanner (部署在jenkins服务器上)

jenkins插件:可根据执行报错自行下载(主要是我也忘了,操作很简单)

注意:具体安装可看devops专栏,docker-compose一键部署

jenkins-pipeline

//定义http方法
def HttpReq(reqType,reqUrl,reqBody){
    // def sonarServer = "http://192.168.1.200:30090/api"
    sonarServer = "http://192.168.100.231:9090/api"
    // 可以不加authentication认证,因为默认不需要
    result = httpRequest authentication: 'sonar-admin-user',
            httpMode: reqType, 
            contentType: "APPLICATION_JSON",
            consoleLogResponseBody: true,
            ignoreSslErrors: true, 
            requestBody: reqBody,
            url: "${sonarServer}/${reqUrl}"
            //quiet: true
    
    return result
}


//获取Sonar质量阈状态
def GetProjectStatus(projectName){
    apiUrl = "project_branches/list?project=${projectName}"
    response = HttpReq("GET",apiUrl,'')
    
    response = readJSON text: """${response.content}"""
    result = response["branches"][0]["status"]["qualityGateStatus"]
    
    println(response)
    
   return result
}
pipeline {
    agent any
    environment {
        scannerPATH = "/var/jenkins_home/sonar-scanner/bin"
        mvnPATH = "/var/jenkins_home/mvn/bin"
        projectName = "${env.JOB_NAME}"
        branchName = "master"
    }
    stages {
        stage('pull code and make') {
            // agent {
            //     docker {
            //         image 'maven:3-alpine'
            //         args '-v /root/.m2:/root/.m2'
            //     }
            // }
            steps {
                git 'https://gitee.com/uuei/java-devops-demo.git'
                sh """
                   ${mvnPATH}/mvn -B -DskipTests clean package
                """
            }
        }
        
        stage('sonar') {
            steps {
                script{
                    sonarDate = sh  returnStdout: true, script: 'date  +%Y%m%d%H%M%S'
                    sonarDate = sonarDate - "\n"
                   
             
                
                }
                sh """ 
                    ${scannerPATH}/sonar-scanner -Dsonar.projectKey=${projectName} \
                    -Dsonar.host.url=http://192.168.100.231:9090 \
                    -Dsonar.login=admin \
                    -Dsonar.password=admin \
                    -Dsonar.projectName=${projectName} -Dsonar.projectVersion=${sonarDate} -Dsonar.ws.timeout=30 \
                    -Dsonar.sources=src/main -Dsonar.sourceEncoding=UTF-8 -Dsonar.java.binaries=target/classes \
                    -Dsonar.java.test.binaries=target/test-classes -Dsonar.java.surefire.report=target/surefire-reports  
                """

                script{
                    result = GetProjectStatus("${projectName}")
                    if ("${result}" == "OK"){
                        println("代码检测通过 ")
                    }else{
                        error "代码检测不通过"
                    }
                    // println("${result}")
                }
            }
        }
        
        stage('Build') {
            steps {
                sh "docker build -t java-demo ."
            }
        }
  

    }
}

### 配置SonarQubeJenkins Pipeline中的集成 为了实现代码质量分析,在Jenkins Pipeline中配置SonarQube是一个常见的做法。这涉及到安装必要的插件以及编写适当的Pipeline脚本。 #### 插件安装 确保已安装`SonarQube Scanner for Jenkins`插件。此插件允许通过命令行执行SonarQube扫描器,从而能够轻松地将其集成到构建过程中[^1]。 #### 准备工作环境 创建一个新的自由风格项目或使用现有的多分支管道定义来设置Pipeline。对于后者,可以利用`Declarative Pipeline`语法简化配置过程[^2]。 #### 编写Pipeline Script 下面展示了一个简单的声明式Pipeline示例,用于运行SonarQube静态分析: ```groovy pipeline { agent any environment { SONAR_SCANNER_HOME = tool name: 'sonar-scanner', type: hudson.plugins.sonar.SonarRunnerInstallation } stages { stage('Checkout') { steps { git branch: 'main', url: 'https://github.com/example/repo.git' } } stage('Build') { steps { sh './gradlew clean assemble' // 或者mvn clean install等其他构建指令 } } stage('Quality Analysis with SonarQube') { steps { script { def scannerHome = tool 'sonar-scanner'; withEnv(["PATH+SONAR=${scannerHome}/bin"]) { sh 'sonar-scanner \ -Dsonar.projectKey=my_project_key \ -Dsonar.sources=src/main/java \ -Dsonar.host.url=http://localhost:9000 \ -Dsonar.login=<your_token>' } } } } stage('Publish Quality Gate Result'){ steps{ waitForQualityGate abortPipeline: true } } } } ``` 上述Groovy脚本展示了如何在一个典型的CI流程里加入SonarQube的质量检测环节。它首先检出了源码仓库的内容并进行了编译打包操作;接着调用了`sonar-scanner`工具来进行静态度量收集,并指定了目标项目的唯一标识符(`projectKey`)、待测文件路径(`sources`)以及其他必要参数如服务器地址和认证令牌等信息;最后一步则是等待来自SonarQube平台返回的结果判断是否满足既定标准,如果不符合则会阻止后续部署动作继续推进。 #### 关键点说明 - 使用`withEnv`方法临时修改环境变量以便于找到正确的SonarScanner可执行程序位置。 - `waitForQualityGate`函数用来同步获取最新的质量门状态更新,当开启`abortPipeline`选项时会在不达标的情况下立即终止整个流水线执行
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值