jenkins+docker+sonar實現(xiàn)容器化構(gòu)建

背景

上一篇文章,我們知道可以通過jenkins的docker插件,實現(xiàn)jenkins的動態(tài)slave,構(gòu)建時創(chuàng)建容器節(jié)點,構(gòu)建結(jié)束,銷毀容器節(jié)點,任務的工作空間也不會保留在服務器上,而是隨容器銷毀。本篇文章介紹具體怎么使用jenkins和docker的這個特性,來實現(xiàn)sonar代碼掃描的動態(tài)構(gòu)建。

工具準備

  • jenkins工具
    配置docker插件,sonar插件
  • sonarqube工具

具體步驟

step 1:配置動態(tài)容器節(jié)點
如何配置動態(tài)容器,請看上一篇,這里不細述。要注意的一點是,需要為動態(tài)容器指定java安裝包的路徑。如下圖所示,筆者節(jié)點所用的鏡像JAVA_HOME及Jdk安裝包的路徑,若不設置這塊信息,容器啟動后,運行sonar-scanner工具時默認會去找jenkins服務器的Jdk路徑,而容器的Jdk路徑與Jenkins服務器的又不一致,故會報錯。

確認容器Jdk安裝路徑,可通過容器構(gòu)建一個簡單工程,用"whereis java"命令輸出路徑即可,如前一篇文章所述。

step 2:Jenkins中配置sonar掃描任務
方式一:非pipeline模式

指定節(jié)點機


配置scm

刪除.svn文件

腳本如下:

#!/bin/bash
# rm svn file   
echo ${WORKSPACE}
if [[ ! -d ${WORKSPACE} ]]; then
    echo "not dir"
    return
fi
SAVEIFS=$IFS;
IFS=$'\n'
rmDirSvn(){
    
    cd ${WORKSPACE};
    
    countF=`ls -A | wc -l` 
    if [[ $countF -eq 0 ]]; then
        cd ./../
        echo ${WORKSPACE} is null
        return;
    fi
    countF=`find . -name ".svn" -mindepth 1 -maxdepth 7`
    echo $countF
    for fileD in $countF; do
        if [[ -d $fileD ]]; then
            echo $fileD
            rm -rf $fileD
        elif [[ ! -e $fileD ]]; then
                echo $fileD not exist
        fi
        
    done
}
rmDirSvn ${WORKSPACE};
IFS=$SAVEIFS

執(zhí)行sonar掃描


查看掃描結(jié)果

step5:查看遠端sonar掃描的報告

方式二,調(diào)整為pipeline模式

pipeline視圖

pipeline內(nèi)部配置

pipeline腳本

def call(Map map,String type){
if(type == "Java"){
    pipeline {
        agent {label 'wu'}
        parameters {
            //單元測試代碼覆蓋率要求,各項目視要求調(diào)整參數(shù)
            string(name:'Svn_url', defaultValue: "${map.Svn_url}", description: '')
            string(name:'Email', defaultValue: "${map.Email}", description: '郵件')
            string(name:'PROJ_NA', defaultValue: "${map.PROJ_NA}", description: '項目名')
        }
        tools {
            maven 'apache-maven-3.1.1'
            jdk   'jdk1.8.0_66'
        }
        environment{
          sonarHome = tool name: 'SonarQube Scanner', type: 'hudson.plugins.sonar.SonarRunnerInstallation'   
         }
         options {
                //保持構(gòu)建的最大個數(shù)
                buildDiscarder(logRotator(numToKeepStr: '5')) 
            }
        stages{
            stage('checkout svn') {
            steps{
                FecthCode()
            }
        }
            stage('SonarQube analysis') {
                steps{
                    JavaAnalysis()
            }
            }
            stage('Quality Get'){
            steps{
                
                script{
                    timeout(10){
                        sleep time:1,unit:'MINUTES'
                        def qg=waitForQualityGate()
                        if(qg.status!="OK"){
                            SendSonarEmail()
                            error "Pipeline aborted due to quality gate failure: ${qg.status}"
                        }else{
                            echo "SUCCESS"
                        }
                    }
                }
                    
                }
            }    
    }
    }
}
}
``
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容