有手就行10——Jenkins+SonarQube程式碼審查

隱姓埋名4869發表於2022-02-17

有手就行10——Jenkins+SonarQube程式碼審查

 

 

Jenkins+SonarQube程式碼審查(1) - 安裝SonarQube

Jenkins+SonarQube程式碼審查(2) - 實現程式碼審查

 

 

Jenkins+SonarQube程式碼審查(1) - 安裝SonarQube

SonarQube是一個用於管理程式碼質量的開放平臺,可以快速的定位程式碼中潛在的或者明顯的錯誤。

目前 支援java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十幾種程式語言的程式碼質量管理與檢測,

底層使用elasticsearch作為程式碼檢索工具。

官網:https://www.sonarqube.org/ 

 

實驗環境:(與jenkins 在同一臺伺服器)主要是快

軟體

伺服器

版本

JDK

20.0.0.30

1.8

MySQL

20.0.0.30

5.7

SonarQube

20.0.0.30

6.7.4

 

SonarQube        

1)安裝MySQL(已完成)不過多講解。

2)安裝SonarQube

在MySQL建立sonar資料庫

 

 

 

下載sonar壓縮包:

https://www.sonarqube.org/downloads/

解壓sonar,並設定許可權

yum install unzip               #(已裝)
unzip sonarqube-6.7.4.zip       #解壓
mkdir /opt/sonar             #建立目錄
mv sonarqube-6.7.4/* /opt/sonar     #移動檔案
useradd sonar              #建立sonar使用者,必須sonar用於啟動,否則報錯
chown -R sonar.  /opt/sonar      #更改sonar目錄及檔案許可權 

修改sonar配置檔案:

cd /opt/sonar
vim sonar/conf/sonar.properties
內容如下: sonar.jdbc.username=root sonar.jdbc.password=abc123 sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar? useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs= maxPerformance&useSSL=false (取消註釋即可)

注意:sonar預設監聽9000埠,如果9000埠被佔用,需要更改。 啟動sonar(注意:切換sonar使用者

cd /opt/sonar
su sonar ./bin/linux-x86-64/sonar.sh start   #啟動 su sonar ./bin/linux-x86-64/sonar.sh status   #檢視狀態 su sonar ./bin/linux-x86-64/sonar.sh stop    #停止 tail -f logs/sonar.logs              #檢視日誌

問 sonar:

http://20.0.0.30:9000

 

預設賬戶:admin/admin 建立token

 

 進去輸入名稱預設生成一個金鑰

 

lvbu: 5013051625e85359eca937815c59a2da393707a5Jenkins整合會使用此金鑰

token要記下來!!!

 

 

Jenkins+SonarQube程式碼審查(2) - 實現程式碼審查

 

 

 

安裝SonarQube Scanner外掛

 

 

安裝SonarQube

 

 

 

 

新增SonarQube憑證

 

 

Jenkins進行SonarQube配置

Manage Jenkins->Configure System->SonarQube servers

 

 

 

 

 

在專案新增SonaQube程式碼審查(非流水線專案)

以自由風格為例:開啟

 

 

 

 

 

# must be unique in a given SonarQube instance 
sonar.projectKey=web_demo_freestyle
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=web_demo_freestyle 
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set. 
sonar.sources=. 
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8 
sonar.java.target=1.8

# Encoding of the source code. Default is default system encoding 
sonar.sourceEncoding=UTF-8

  

然後構建:

sonarqube伺服器上重新整理,檢視結果

 

 

 

 

 

測試錯誤程式碼

新建Javaresource目錄

 

 

 

 

 

配置pom.xml檔案新增對servlet的依賴

 

 

 

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
</dependency>

  

 

新建編寫Servlet檔案

 

 

 建立名稱:com.lvbu.HelloServlet

內容如下:

ackage com.lvbu;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //模擬錯誤程式碼
        int i = 100/0;

        //模擬程式碼冗餘
        int j = 100;
        j = 200;

        resp.getWriter().write("hello Servlet");
    }
}

  

 

然後程式碼提交:

 

 

 

 

 

然後構建:看結果:

 

 

 

 其中可能會報錯:

  

解決方法:

 

 

 

 

 

 

 

 

 

然後再次提交專案加構建:

 

 程式碼檢查後就可以了!

 

在專案新增SonaQube程式碼審查(流水線專案)

1) 專案根目錄下,建立sonar-project.properties檔案

 

# must be unique in a given SonarQube instance
sonar.projectKey=web_demo_lsx
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=web_demo_lsx
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**

sonar.java.source=1.8
sonar.java.target=1.8

# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8

  

2) 修改Jenkinsfile,加入SonarQube程式碼審查階段

pipeline {
agent any

stages {
stage('pull code') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'd5bb0e98-15f2-477f-8db7-2c33ecc6c644', url: 'git@20.0.0.20:niuma/web_demo.git']]])
}
}
stage('code checking') {
steps {
script {
//引入了sonarqube-scanner工具
scannerHome = tool 'sonar-scanner'
}
//引入了sonarqube伺服器系統環境
withSonarQubeEnv('sonarqube') {
sh "${scannerHome}/bin/sonar-scanner"
}
}
}
stage('build project') {
steps {
sh 'mvn clean package'
}
}
stage('deploy item') {
steps {
deploy adapters: [tomcat8(credentialsId: '38dcb730-8901-41bb-b8d0-d1500aa9cf79', path: '', url: 'http://20.0.0.40:8080/')], contextPath: null, war: 'target/*.war'
}
}
}
post {
always {
emailext(
subject: '構建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',body: '${FILE,path="email.html"}', to: '1321519531@qq.com'
)
}
}
}

  

 

把更改後的sonar-project.propertiesJenkinsfile進行提交

 

 

然後開始構建:

 

 

 

檢視測試結果:

 

 

 

郵件通知也會收到:

 

 

相關文章