1. sonarQube
大多數jenkins的流水線都有一個“分析”的階段,用於處理收集代碼的指標、確定複雜度,識別不良編碼和可能的漏洞以及計算潛在的資源成本(技術債務)。這些分析可以識別潛在的問題,修復這些問題。可以增強代碼的可讀性,可靠性和可維護性。
而在jenkins的分析階段,用的往往是目前最流行的’分析’應用之一 sonarQube。
sonarQube(以前被稱爲sonar)是一個用於管理一些關鍵軟件領域的代碼質量,包括
- 架構設計
- 註釋
- 編碼規則
- 潛在錯誤
- 重複代碼
- 單元測試
- 複雜度
的一個開源項目。
具體的使用指南,請查看sonarQube使用指南
2. jenkins安裝SonarQube Scanner插件
登陸jenkins頁面
–>系統管理
–>插件管理
安裝插件SonarQube Scanner
這個插件的主要作用是提供一個與sonarQube服務器連接的橋樑。安裝完此插件之後,需要配置sonarQube的地址。
安裝完成,重啓之後。
登陸jenkins頁面
–>系統管理
–>系統配置
- 找到SonarQube servers,配置你的sonarQube服務器地址。
-
添加token:(怎麼添加看下一步)
選擇 Secret text。將生成的token填寫至Secret中。ID可以自己隨便填寫或者不寫
- (這個是sonarQube管理員頁面)使用sonarQube管理員生成token
至此,jenkins算是與sonarQube建立了連接。
3. sonarQube掃描器
sonarQube掃描代碼,需要一個插件工具既是sonarQube掃描插件工具。這個工具的安裝方式有很多種,
-
通過自動化構建工具安裝
不管是maven項目,還是gradle項目都提供了安裝sonarQube掃描工具的插件。
這種方式就是將插件安裝在具體的項目中
比如:Gradle項目,需要在你項目中的build.gradle文件中,引入
plugins { id "org.sonarqube" version "2.7" }
-
通過jenkins安裝
在jenkins中安裝掃描器工具。這樣一來,就可以掃描所有的項目。不需要爲項目單獨安裝。
安裝方式:
登陸jenkins頁面
–>系統管理
–>全局工具配置
找到SonarQube Scanner ,
如果可以上網,網速還可以,可以進行自動安裝。該掃描工具插件下載源是maven中央倉庫
如果網速一般或者要求離線安裝。需要自己下載相應版本的工具,填寫安裝路徑。
然後解壓放到jenkins的插件目錄下(這個目錄隨意,保持路徑一致,jenkins能找到就行)
/var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/myScanner
修改配置文件:添加對應路徑
hudson.plugins.sonar.SonarRunnerInstallation.xml
<?xml version='1.1' encoding='UTF-8'?>
<hudson.plugins.sonar.SonarRunnerInstallation_-DescriptorImpl plugin="[email protected]">
<installations>
<hudson.plugins.sonar.SonarRunnerInstallation>
<name>myScanner</name> <home>/var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/myScanner</home>
</hudson.plugins.sonar.SonarRunnerInstallation>
</hudson.plugins.sonar.SonarRunnerInstallation_-DescriptorImpl>
jenkins這些配置都是熱讀取,不用重啓。
注意解壓後插件掃描工具,執行文件的文件權限問題
[root@node1 bin]# ll 總用量 16 -rwxr-xr-x 1 root root 1762 2月 20 08:14 sonar-scanner -rwxr-xr-x 1 root root 2420 2月 20 08:14 sonar-scanner.bat -rwxr-xr-x 1 root root 595 2月 20 08:14 sonar-scanner-debug -rwxr-xr-x 1 root root 544 2月 20 08:14 sonar-scanner-debug.bat
頁面配置對應地址就可以了
4. 代碼質量掃描
這裏構建一個普通的流水線腳本
pipeline {
agent any
stages {
stage('獲取源碼') {
steps {
script {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'http://git.com.cn/test.git']]])
}
}
}
stage('代碼質量檢測') {
steps {
script {
def scannerHome = tool 'myScanner';//這個名字一定是對應全局工具配置中sonar掃描器的名字
withSonarQubeEnv(credentialsId: '8e08dedd-70ec-485a-a33e-e06ca100c010') {
sh "${scannerHome}/bin/sonar-scanner
-Dsonar.projectKey=XXXServer
-Dsonar.projectName=XXXServer
-Dsonar.projectVersion=2.0.0
-Dsonar.language=java
-Dsonar.sourceEncoding=utf8
-Dsonar.sources=.
-Dsonar.java.binaries=."//這裏將sonarQube的屬性定義在這裏,可以定義在項目文件中,在這裏引用配置文件
}
}
}
}
}
}