Jenkins+Sonar質量門禁【實踐篇-pipeline版】


Jenkins+Sonar質量門禁【實踐篇-pipeline版】

一、目標

  效果是要實現文章:Jenkins+Sonar質量門禁實踐【https://blog.csdn.net/jiangjunsss/article/details/119918932】里面的接入sonar質量門禁,當掃描不滿足制定的質量閥時就不進行后面的步驟。

  文章提到,有兩種方法使得jenkins新建的job使用sonar

  • a. 直接將sonar-project.properties配置內容寫到 Analysis properties 中

  • b. 將配置好的sonar-project.properties文件放置在代碼目錄中,在 Path to project properties 配置相應的文件名

  明顯用pipeline方式去實驗質量門禁,需要用第 b 種方法,因為你會發現,新建流水線是沒地方配置Analysis properties 的,而且pipeline代碼里面需要用到waitForQualityGate() 來獲取質量門禁的狀態,也沒地方讓你配置(參數說明,請參考官網jenkins插件:https://www.jenkins.io/doc/pipeline/steps/sonar/)

先上效果圖:

前提:把上一篇文章的helloworld項目放到我自己的gitee里(因為某俊的helloworld我添加不了文件到git上),新建一個sonar-project.properties文件,跟pom.xml同級目錄。在sonar服務端的質量閾中設置質量門禁,並配置好jenkins回調地址

 

 

 

、注意點

1、git項目上,pom.xml 同級目錄上,要放一個 sonar-project.properties 

內容如下:

sonar.login=admin    
sonar.password=admin
# 項目key 保證唯一
sonar.projectKey=ljy
# 項目名字
sonar.projectName=helloworld-ljy
sonar.projectVersion=1.0
sonar.sources=.
sonar.java.binaries=target/classes

 然后把參考文章中的流水線代碼拷過來就開始各種報錯了,其中一個是找不到 target/classes 目錄

  上篇的maven篇文章,還記得截圖上的maven build么,整合到jenkins發布,是需要加上來的。

完整pipeline代碼先貼上,我再解釋:

pipeline {
    agent any
    environment {
        GIT_URL="https://gitee.com/windysai/helloworld.git"
        SCANNER_HOME = tool 'SonarQubeScanner'
    }
    stages {
        stage("拉取代碼") {
            steps{
                echo "git pull ${BRANCH} from ${GIT_URL}"
                git branch: "${BRANCH}", url: "${GIT_URL}"
            }
        }
## 要加上去 stage(
'mvn compile'){ steps { echo "compile code" sh "/usr/local/maven/bin/mvn clean install -e -DskipTests=true -Ptest -f pom.xml" } } stage('靜態代碼靜態掃描'){ steps { withSonarQubeEnv('MyScanner') { sh '''$SCANNER_HOME/bin/sonar-scanner \ -Dsonar.login=admin \ -Dsonar.password=admin ''' } } } stage('檢查結果分析') { steps { script{ timeout(5) { def qg=waitForQualityGate() echo "結果狀態: ${qg.status}" if (qg.status!='OK') error '未達到代碼門禁要求 !' } } } } } }

里面引用到的sonar配置,這篇文章的對應關系,寫的比較詳細:https://igorski.co/sonarqube-scans-using-jenkins-declarative-pipelines/

測試的pipeline代碼中,報錯最多是“ERROR: SonarQube installation defined in this job (sonar_scanner) does not match any configured installation. Number of installations that can be configured: 1.”。原因是sonar scanner工具和sonar server 沒分清楚!一個是jenkins里面的插件工具,用來進行代碼掃描的的,一個是要連接的sonar服務端,用於把掃描的結果詳情存起來的。

看jenkins的控制台輸出會更加理解:

 

scanner 在全局工具里配置的,名字:SonarQubeScanner, 所以pipeline開始有個環境變量聲明就是它的名字。

 

 

 MyScanner就是我配置的sonar server

 

二、遇到的其他一些問題

  1、網上找到的配置文檔很多都把jenkins回調接口寫成:http://jenkins所在服務器ip:jenkins監控端口/jenkins/sonarqube-webhook/

但對於docker容器跑的jenkins,實際上是:http://jenkins所在服務器ip:jenkins監控端口/sonarqube-webhook/。

一個簡單測試是在瀏覽器打開回調接口,應該會出現下面的返回截圖。如果沒有配對,waitForQualityGate() 獲取的返回結果一直會是:pending狀態,直到超時退出。

 

     2、參考文檔上的 timeout(5) ,注意括號應該是英文形式;

  3、公司的項目后來也測試成功了,需要在maven配置文件:settings.xml 添加公司nexus倉庫地址,因為有些包就是從里面拉的,默認的倉庫會因為拉不到依賴包報錯。

  還有一個未解的問題,在sonarqube設置自己新建的質量閾規則時,項目還是沿用默認、內置的規則:Sonar Way,我的testljy規則一直無法生效,后續再研究下

 

 

最后感謝一系列給我幫助的文檔(排名不分先后,哈哈哈)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM