首頁

目前文章總數:172 篇

  

最後更新:2025年 03月 22日

0016. Jenkins 整合 SonarQube - 建構自動化 CICD 為程式碼品質把關

日期:2025年 02月 01日

標籤: Jenkins Continuous Integration(CI) Continuous Deployment(CD) Linux Ubuntu SonarQube

摘要:Jenkins


應用所需:1. jenkins 主機(本篇 Linux Ubuntu 22.04 作業系統,容器化 Jenkins)
     2. 已搭建好的 SonarQube 伺服器
     3. 已安裝好 Docker
解決問題:如何將 SonarQube 整合 Jenkins ,當 Jenkins 完成 CICD 流程後,進行自動化代碼檢測,並且產生報告
相關參考:0013. Ubuntu 搭建 SonarQube - 建構企業級程式碼品質把關流程:容器化指南
基本介紹:本篇分為3大部分。
第一部分:Jenkins 配置 SonarQube
第二部分:Job PipeLine 腳本
第三部分:Demo 結果






第一部分:Jenkins 配置 SonarQube

Step 1:SonarQube 文件

SonarQube 官方文件 有說明整合的部分,可以參考



Step 2:安裝插件 - 開啟

登入 Jenkins -> 管理 Jenkins -> 選擇 Plugings (在 System Configure)

Step 3:安裝插件 - SonarQube

左邊選擇 Installed Plugins -> 找到 SonarQube Scanner for Jenkins -> 安裝



Step 4:設定 SonarQube 金鑰 - 開啟

回到管理 Jenkins -> 選擇 Credentials (在 Security)

Step 5:設定 SonarQube 金鑰 - Golobal

開啟 Global 選項

Step 6:設定 SonarQube 金鑰 - 新增開啟

選擇右上角 Add Credentials

Step 7:設定 SonarQube 金鑰 - 新增金鑰

將 SonarQube Server 上的專案資訊貼上,其中 ID 會用在 Jenkins 的 Pipeline 腳本,是需要記下的代號


如果忘記了自己的專案 Token ,可以到 SonarQube Server 上檢查對應專案

Step 8:設定 SonarQube 插件 - 開啟

回到管理 Jenkins -> 選擇 System

Step 9:設定 SonarQube 插件 - 填上資訊

在中間位置附近,或搜尋 SonarQube Servers 關鍵字,可以找到,將正確資訊貼上



第二部分:Job PipeLine 腳本

Step 1:新增 Job

接著新增 Job -> 輸入名稱 -> 選擇 Pipeline 模式

Step 2:Pipeline 腳本 - 說明

將以下 Groovy Script 語法貼上,使用的 Github 代碼,
範例檔案:連結

pipeline {
    agent any

    //1. 設定使用的 SonarQube Token
    environment {
        SONAR_TOKEN = credentials('SONAR_TOKEN')  // 在 Jenkins 憑證中設置
    }

    stages {
      
	    //2. 取得SourceCode
        stage('Checkout') {
           steps {
		        // 2-1. 取得前清除工作區
                cleanWs()
                
				// 2-2. 取得代碼
                checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[url: 'https://github.com/gotoa1234/MyBlogExample.git']])
            }
        }
        
		//3. 建置程式 - 確保正確
        stage('Build') {
            steps {
                // 3-1. 切換到特定專案目錄
                dir('MinIOWebSiteExample/MinIOWebSiteExample') {
                    // 3-2. 建置專案
                    sh 'dotnet restore MinIOWebSiteExample.csproj'
                    sh 'dotnet build MinIOWebSiteExample.csproj --configuration Release'
                }
            }
        }
        
        //4. 部署程式 - 完成CICD
        stage('Deploy') {
            steps {
                // 假裝部署到某些機器上
                sh 'echo DeployFinish...'
            }
        }
        
		//5. 上述都完成後,進行 SonarQube 的程式碼分析
        stage('SonarQube Analysis') {
            steps {
                // 5-1. 切換到特定專案目錄
                dir('MinIOWebSiteExample/MinIOWebSiteExample') {
                    withSonarQubeEnv('TestDotnetCoreProject') {

                        sh """
						    # 5-2. 指定正確的 dotnet 目錄
                            export PATH="$PATH:/root/.dotnet/tools"
                            
							# 5-3. 開始掃描
                            dotnet sonarscanner begin \
                                /k:\"TestDotnetCoreProject\" \
                                /d:sonar.host.url=\"http://192.168.51.28:9100\" \
                                /d:sonar.token=\"${SONAR_TOKEN}\"
                            
							# 5-4. 建置代碼
                            dotnet build MinIOWebSiteExample.sln --configuration Release
                            
							# 5-5. 上傳到 SonarQube 網站
                            dotnet sonarscanner end /d:sonar.token=\"${SONAR_TOKEN}\"
                        """
                    }
                }
            }
        }    
    }
}


上述的工作區分 4 項 Stage 模擬取代碼 -> 建置 -> 部署 -> 分析代碼回報

1. 準備階段 - 設定使用的 SonarQube Token
2. Stage1 - 取得SourceCode
3. Stage2 - 建置程式 - 確保正確
4. Stage3 - 部署程式 - 完成CICD
5. Stage4 - 進行 SonarQube 的程式碼分析


Step 3:確保 Jenkins 容器可執行 - dotnet 已安裝

為了確保 Jenkins 容器可建置 DotNet Core,首先要進入 Jenkins 容器中

docker exec -u root -it {你的 Jenkins 容器 ID} bash


並且安裝 DotNet Core,依序執行:

curl -O https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
dpkg -i packages-microsoft-prod.deb
apt-get update
apt-get install -y apt-transport-https
apt-get install -y dotnet-sdk-8.0



全部安裝完後,可以在容器內輸入以下檢查:

dotnet -v



Step 4:確保 Jenkins 容器可執行 - SonarQube 已安裝

為了確保 Jenkins 容器可執行 DotNet SonarQube 工具,也需要進入 Jenkins 容器中檢查是否執行官方建議步驟 (依序執行這 4 項)

Step 5:確保 Jenkins 容器可執行 - 權限足夠

為了確保 Jenkins 容器權限足夠,可以將 SonarQube 的分析資料傳送到另一個 API 上,再啟動 Jenkins 容器時,確保有足夠權限
以下用 root 權限啟動容器:

docker run -d --name jenkins --user root --rm -p 8180:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts




第三部分:Demo 結果

Step 1:建置 Jenkins Job - 成功

上述都完成後,執行建置 Job 可以得到成功的結果

Step 2:建置 Jenkins Job - 點開 Pass 按鈕

如果點開 Pass 按鈕 (如果失敗是 Error),會自動導向到 SonarQube 的 WebUI 介面上

Step 3:建置 Jenkins Job - 點開 Stages 按鈕

如果點開 Jenkins 的 Stages 按鈕,可以觀察到每個 Stage 的執行流程,在排查問題時,也可以知道哪個階段出錯