分享程式代碼相關筆記
目前文章總數:172 篇
最後更新:2025年 03月 22日
SonarQube 官方文件 有說明整合的部分,可以參考
登入 Jenkins -> 管理 Jenkins -> 選擇 Plugings (在 System Configure)
左邊選擇 Installed Plugins -> 找到 SonarQube Scanner for Jenkins -> 安裝
回到管理 Jenkins -> 選擇 Credentials (在 Security)
開啟 Global 選項
選擇右上角 Add Credentials
將 SonarQube Server 上的專案資訊貼上,其中 ID 會用在 Jenkins 的 Pipeline 腳本,是需要記下的代號
如果忘記了自己的專案 Token ,可以到 SonarQube Server 上檢查對應專案
回到管理 Jenkins -> 選擇 System
在中間位置附近,或搜尋 SonarQube Servers 關鍵字,可以找到,將正確資訊貼上
接著新增 Job -> 輸入名稱 -> 選擇 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 的程式碼分析 |
為了確保 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
為了確保 Jenkins 容器可執行 DotNet SonarQube 工具,也需要進入 Jenkins 容器中檢查是否執行官方建議步驟 (依序執行這 4 項)
為了確保 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
上述都完成後,執行建置 Job 可以得到成功的結果
如果點開 Pass 按鈕 (如果失敗是 Error),會自動導向到 SonarQube 的 WebUI 介面上
如果點開 Jenkins 的 Stages 按鈕,可以觀察到每個 Stage 的執行流程,在排查問題時,也可以知道哪個階段出錯