超詳細,自動化測試接入Jenkins+Sonar質量門禁實踐

  • 2021 年 8 月 25 日
  • 筆記

大家好,我叫董鑫,一名在測試開發道路上的新手。第一階段的學習已然結束,收穫頗多,了解了很多在自己平時測試工作無法接觸到的新知識,比如這次在這裡分享的Sonarqube進行靜態代碼掃描並集成Jenkins的知識,是分享也是自我學習的總結。若有不對的地方,還請各位同行,同學,老師及時指正。

1. 什麼是SonarQube

SonarQube是一個開源的代碼質量管理系統,用於檢測代碼中的錯誤,漏洞和代碼規範,通過插件的機制,

可以基於現有的GitlabJenkins 集成、以便在項目拉取後進行連續的代碼檢查。

優點:

◆ 支持眾多計算機編程語言

◆ 通過插件機制能集成IDE、Jenkins、Git等

◆ 內置大量常用代碼檢查規則

◆ 支持定製開發規則

◆ 可視化界面

◆ 支持從可靠性、安全性、可維護性、覆蓋率、重複率等 方面分析項目

具體的配置及文檔可以訪問下面的鏈接查看:

//www.sonarqube.org/downloads/ 
//docs.sonarqube.org/latest/analysis/scan/sonarscanner/ 

2. Jenkins插件安裝及配置

Sonarqube想要與Jenkins集成,需要安裝相應的插件來支持。

在插件管理中搜索名為Sonarqube Scanner for Jenkins的插件 並安裝。

安裝好插件後,還需要配置相應的服務和工具信息:

2.1. 系統設置->SonarQube servers

  • name:可自定義)
  • server url:這個地址就是你sonar服務所在的地址
  • token:在sonar項目中生成的token

2.2. 全局工具配置》SonarQube Scanner

建議不採用自動安裝,使用手動下載配置好的sonar scanner

  • name:自定義sonar scanner名稱,建議使用sonar-scanner
  • SONAR_RUNNER_HOME:sonar scanner所在的家目錄

3. 自由風格的job使用sonar

3.1 配置代碼倉庫地址:

3.2 勾選sonarqube 服務並選擇token:

3.3 在構建中添加Exeute SonarQube Sanner

這裡可以使用兩種方式:

  • a. 直接將sonar-project.properties配置內容寫到 Analysis properties 中
  • b. 將配置好的sonar-project.properties文件放置在代碼目錄中,在 Path to project properties 配置相應的文件名

建議使用第二種方式來管理
我配置的sonar-project.properties文件如下:

保存好後,就可以來構建了。構建後項目頁面可以直接跳轉到sonarqube服務查看。

4. pipeline流水線使用sonar

4.1 構建一個流水線job,流水線pipeline script如下編寫:

pipeline {
    agent any

    stages {
        stage('拉取代碼') {
            steps {
                git credentialsId: 'gitee', url: '//gitee.com/dx0001/work.git'
            }
        }
        stage('靜態代碼靜態掃描') {
            steps {
                withSonarQubeEnv('sonarqube'){
                    bat "sonar-scanner"
                }
            }
        }
    }    

注意: 這裡的名稱是在Jenkins中系統管理–sonarqube servers添加的名稱
同樣的,設置好job後就可以構建進行代碼掃描了。

5. 接入Sonar質量門禁

通過上面的job,只是代碼掃描可能無法滿足日常的情況,當掃描的結構不滿足時我可能就不進行後面的步驟了,這樣的情況,我們就需要接入質量門禁的方式來實現。

5.1 在sonar服務端的質量閥中設置質量門禁,添加要運用的項目

質量配置->質量閥

這裡可以添加指標來定義通過掃描的條件。然後將設置的質量閥分配給要掃描的項目。

5.2 在sonar服務端的配置裏面添加網絡調用hook

配置->網絡調用

這裡添加Jenkins調用的地址,用來回調掃描的結果。URL配置為:Jenkins地址+/sonarqube-webhook

5.3 流水線改造

pipeline {
    agent any

    stages {
        stage('拉取代碼') {
            steps {
                git credentialsId: 'gitee', url: '//gitee.com/dx0001/work.git'
            }
        }
        stage('靜態代碼靜態掃描') {
            steps {
                withSonarQubeEnv('sonarqube'){
                    bat "sonar-scanner"
                }
            }
        }
        stage('檢查結果分析') {
            steps {
                script{
                    timeout(5){
                        def qg=waitForQualityGate()
                        echo "結果狀態:${qg.status}"
                        if(qg.status!='OK')
                            error '未達到代碼門禁要求!'
                    }
                }
            }
        }
    }
}

在上面的流水線的job上增加一個「檢查結果分析」的步驟,使用waitForQualityDate()的方法來獲取掃描是否通過質量閥的狀態值。最後使用if條件來判斷,不通過時則使用「error」來中斷流程,實現質量門禁的功能。

6. 小結

此次分享就到這裡了,更多的是自我知識沉澱的過程,第一階段的學習雖已結束,但對於我更多的是開始,很多的知識需要自己動手搭環境來實踐,我很享受這個過程。將一個個知識落實,弄清楚,是一件令我非常高興的事情。接觸並學習更多測試開發的知識,在測試的道路上越走越寬,越走越遠,為此,奮力前進!