Jenkins 集成 SonarQube 代碼靜態檢查使用說明

環境準備

  1. Jenkins 服務器

    • 確保 Jenkins 已安裝并運行(推薦 LTS 版本)。
    • 安裝插件:
      • SonarQube Scanner for Jenkins(用于集成 SonarQube 掃描)
      • NodeJS Plugin(可選,用于 JavaScript 項目)
      • Pipeline Utility Steps(Pipeline 項目可能需要)
  2. SonarQube 服務器

    • 安裝 SonarQube 并啟動(版本需兼容語言插件)。
    • 安裝語言插件:
      • SonarJava(Java)
      • SonarPython(Python)
      • SonarJS(JavaScript/TypeScript)
      • SonarCFamily(C/C++,需企業版或社區版插件)| Sonar-cxx插件
      • SonarGroovy(Groovy)
      • SonarRust(Rust,需社區插件)
    • 生成 SonarQube Token:
      登錄 SonarQube → 用戶頭像 → My AccountSecurity → 生成 Token。

1

Jenkins 全局配置

  1. 配置 SonarQube 服務器

    • 進入 Jenkins → Manage JenkinsSystem ConfigurationConfigure System
    • 找到 SonarQube servers → 點擊 Add SonarQube
      • Name: 自定義名稱(如 SonarQube-Prod
      • Server URL: SonarQube 服務器地址(如 http://sonar.example.com:9000
      • Server authentication token: 選擇預存的 SonarQube Token(需提前在 Jenkins Credentials 中配置)。
  2. 配置 SonarScanner

    • 進入 Jenkins → Manage JenkinsToolsSonarScanner installations
    • 添加 SonarScanner 版本(自動下載或指定本地路徑)。

三、項目配置(以 Pipeline 項目為例)
  1. Pipeline 腳本模板

    pipeline {agent anyenvironment {SONAR_SCANNER_HOME = tool 'SonarScanner' // 與全局配置的名稱一致}stages {stage('Checkout') {steps {git url: 'https://github.com/your-project.git', branch: 'main'}}stage('Build & Test') {steps {// 根據語言執行編譯和測試(例如 Maven、Gradle、Make 等)sh 'mvn clean package'  // Java 示例}}stage('SonarQube Analysis') {steps {withSonarQubeEnv('SonarQube-Prod') { // 與全局配置的名稱一致sh """${SONAR_SCANNER_HOME}/bin/sonar-scanner \-Dsonar.projectKey=your-project-key \-Dsonar.sources=. \-Dsonar.host.url=http://sonar.example.com:9000 \-Dsonar.login=${SONARQUBE_TOKEN} \-Dsonar.language=java  # 指定語言(可選)"""}}}}
    }
    
  2. 多語言項目配置

    • sonar-scanner 命令中指定語言相關參數,或通過 sonar-project.properties 文件配置。
    • 示例 sonar-project.properties
      sonar.projectKey=your-project
      sonar.sources=src
      sonar.language=java  # 或 cpp, python, js 等
      sonar.java.binaries=target/classes  # Java 編譯目錄
      sonar.cfamily.build-wrapper-output=bw-output  # C/C++ 編譯輸出
      

各語言特殊配置

  1. Java

    • 使用 Maven/Gradle 插件:
      mvn sonar:sonar -Dsonar.login=<TOKEN>
      
    • 需生成單元測試覆蓋率報告(如 Jacoco)。
  2. C/C++

    • 安裝 SonarBuildWrapper(生成編譯數據庫):
      build-wrapper --out-dir bw-output make clean all
      
    • 掃描時指定編譯輸出目錄:
      sonar-scanner -Dsonar.cfamily.build-wrapper-output=bw-output
      
  3. Python

    • 安裝依賴:
      pip install pytest coverage  # 生成測試覆蓋率
      
    • 掃描時指定測試框架:
      sonar.python.coverage.reportPaths=coverage.xml
      
  4. JavaScript

    • 安裝 Node.js 環境。
    • 生成 LCOV 覆蓋率報告:
      npm test -- --coverage
      
  5. Rust

    • 使用社區插件(如 sonar-rust),需手動配置規則。
    • 掃描時指定源碼路徑:
      sonar.rust.sources=src
      
  6. Groovy

    • 使用 sonar.groovy.file.suffixes=.groovy 指定文件后綴。

注意事項

  1. 權限問題
    • 確保 Jenkins 用戶有權限訪問代碼倉庫和 SonarQube 服務器。
  2. 版本兼容性
    • 檢查 SonarQube 插件與語言版本的兼容性(如 Python 3.10+ 需要最新插件)。
  3. 代碼覆蓋率
    • 大多數語言需手動生成覆蓋率報告(如 Jacoco、Coverage.py、LCOV)。
  4. 增量分析
    • 使用 sonar.scm.provider=git 啟用增量分析以加速掃描。

驗證結果

  1. 在 Jenkins 控制臺查看掃描日志,確認無報錯。
  2. 登錄 SonarQube 控制臺,查看項目分析結果。
  3. 根據 SonarQube 提示修復代碼質量問題。

通過以上步驟,可實現 Jenkins 與 SonarQube 的自動化代碼質量檢查,支持多種語言靜態分析。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73340.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73340.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73340.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

EasyRTC輕量級Webrtc音視頻通話SDK,助力帶屏IPC在嵌入式設備中的應用

一、市場背景 隨著人們生活水平的提高&#xff0c;對于家居安全和遠程監控的需求日益增長&#xff0c;帶屏IPCam不僅滿足了用戶實時查看監控畫面的需求&#xff0c;還提供了諸如雙向語音通話、智能報警等豐富的功能&#xff0c;極大地提升了用戶體驗。 此外&#xff0c;技術的…

AI編輯器-Trae 玩轉AI 編程

參考 掘金社區地址 Trae下載地址 管理插件 Trae 從入門到實踐:AI 編碼的妙筆生花 掘金社區 掘金社區簡介 掘金是面向全球中文開發者的技術內容分享與交流平臺。我們通過技術文章、沸點、課程、直播等產品和服務,打造一個激發開發者創作靈感,激勵開發者沉淀分享,陪伴開發者…

C語言代碼如何操作硬件?

在嵌入式開發中&#xff0c;C代碼通過直接操作硬件寄存器來控制硬件&#xff0c;這些寄存器被映射到特定的內存地址。以下是其工作原理的詳細分步解釋&#xff1a; 1. 內存映射硬件寄存器 微控制器將外設&#xff08;如GPIO、定時器、UART等&#xff09;的寄存器映射到內存地…

Flume-試題

以下是對話中涉及的題目及其簡要解析&#xff1a; 1. 哪個 Flume Source 可用于監控某個端口&#xff0c;將流經端口的每一個文本行數據作為 Event 輸入&#xff1f; - A. Avro Source - B. exec Source - C. Spooling Directory Source - D. Netcat Source 2. 哪…

C++《紅黑樹》

在之前的篇章當中我們已經了解了基于二叉搜索樹的AVL樹&#xff0c;那么接下來在本篇當中將繼續來學習另一種基于二叉搜索樹的樹狀結構——紅黑樹&#xff0c;在此和之前學習AVL樹類似還是通過先了解紅黑樹是什么以及紅黑樹的結構特點&#xff0c;接下來在試著實現紅黑樹的結構…

【第23節】windows網絡編程模型(WSAEventSelect模型)

目錄 引言 一、WSAEventSelect模型概述 二、 WSAEventSelect模型的實現流程 2.1 創建一個事件對象&#xff0c;注冊網絡事件 2.2 等待網絡事件發生 2.3 獲取網絡事件 2.4 手動設置信號量和釋放資源 三、 WSAEventSelect模型偽代碼示例 四、完整實踐示例代碼 引言 在網…

概率預測之NGBoost(Natural Gradient Boosting)回歸和分位數(Quantile Regression)回歸

概率預測之NGBoost(Natural Gradient Boosting)回歸和線性分位數回歸 NGBoostNGBoost超參數解釋NGBoost.fitscore(X, Y)staged_predict(X)feature_importances_pred_dist 方法來獲取概率分布對象分位數回歸(Quantile Regression)smf.quantreg 對多變量數據進行分位數回歸分…

手撕算法——鏈表

算法基礎——鏈表-CSDN博客 一、排隊順序 題?來源&#xff1a;洛? 題?鏈接&#xff1a;B3630 排隊順序 - 洛谷 難度系數&#xff1a;★ 1. 題目描述 2. 算法原理 本題相當于告訴了我們每?個點的后繼&#xff0c;使?靜態鏈表的存儲?式能夠很好的還原這個隊列。 數組中 [1,…

RAG優化:python從零實現[吃一塹長一智]循環反饋Feedback

本文將介紹一種有反饋循環機制的RAG系統,讓當AI學會"吃一塹長一智",給傳統RAG裝了個"后悔"系統,讓AI能記住哪些回答被用戶點贊/拍磚,從此告別金魚記憶: 每次回答都像在玩roguelike:失敗結局會強化下次冒險悄悄把優質問答變成新知識卡牌,實現"以…

kotlin init執行順序

一 代碼 kotlin: package test.fclass Test1 { }class TestInit(s: String, i: Int) {var name: String? nullvar age 0private var a :Int 1init {this.name sthis.age iprintln("init代碼塊: $name, $age")}}轉成java // Test1.java package test.f;import…

使用cursor開發java案例——springboot整合elasticsearch

安裝elasticsearch 打開cursor&#xff0c;輸入如下提示詞 使用springboot整合elasticsearch。其中elasticsearch服務器ip&#xff1a;192.168.236.134 管理員用戶名elastic 管理員密碼 PdQy_xfR2yLhpok*MK_ 監聽端口9200點Accept all 使用idea打開生成的項目 &#xff0…

Java Collection API增強功能系列之一 Arrays.asList()

在Java編程中&#xff0c;Arrays.asList() 是一個高頻使用卻又容易引發陷阱的工具方法。它能夠快速將數組轉換為列表&#xff0c;但其特殊行為常常讓開發者踩坑。本文將深入剖析該方法的本質特性&#xff0c;并揭示其使用時的注意事項。一、方法定義與基礎用法 1. 方法簽名 p…

vue3 項目的最新eslint9 + prettier 配置

注意&#xff1a;eslint目前升級到9版本了 在 ESLint v9 中&#xff0c;配置文件已經從 .eslintrc 遷移到了 eslint.config.js 配置的方式和之前的方式不太一樣了&#xff01;&#xff01;&#xff01;&#xff01; 詳見自己的語雀文檔&#xff1a;5、新版eslint9prettier 配…

基于FPGA的16QAM+幀同步系統verilog開發,包含testbench,高斯信道,誤碼統計,可設置SNR

目錄 1.算法仿真效果 2.算法涉及理論知識概要 2.1 16QAM調制解調原理 2.2 幀同步 3.Verilog核心程序 4.完整算法代碼文件獲得 1.算法仿真效果 vivado2019.2仿真結果如下&#xff08;完整代碼運行后無水印&#xff09;&#xff1a; 設置SNR12db 將FPGA數據導入到MATLAB顯…

[學成在線]06-視頻分片上傳

上傳視頻 需求分析 教學機構人員進入媒資管理列表查詢自己上傳的媒資文件。 點擊“媒資管理” 進入媒資管理列表頁面查詢本機構上傳的媒資文件。 教育機構用戶在"媒資管理"頁面中點擊 "上傳視頻" 按鈕。 點擊“上傳視頻”打開上傳頁面 選擇要上傳的文件…

Maven安裝與環境配置

首先我們先介紹一些關于Maven的知識&#xff0c;如果著急直接看下面的安裝教程。 目錄 Maven介紹 Maven模型 Maven倉庫 Maven安裝 下載 安裝步驟 Maven介紹 Apache Maven是一個項目管理和構建工具&#xff0c;它基于項目對象模型(Project Object Model , 簡稱: POM)的概念…

【新能源汽車溫度采集與控制系統設計深度解析】

面向汽車行業研發與測試測量設備從業者的技術指南 一、硬件架構設計 新能源汽車的溫度采集與控制系統是保障電池、電機、電控等核心部件安全運行的核心技術之一。其硬件架構需兼顧高精度、抗干擾、可靠性與集成化&#xff0c;以下從信號調理電路、ADC模塊、隔離設計三個維度展…

AI Tokenization

AI Tokenization 人工智能分詞初步了解 類似現在這個&#xff0c;一格子 一格子&#xff0c;拼接出來的&#xff0c;一行或者一句&#xff0c;像不像&#xff0c;我們人類思考的時候組裝出來的話&#xff0c;并用嘴說出來了呢。

React(四)setState原理-性能優化-ref

setState詳解 實現原理 開發中我們并不能直接修改State來重新渲染界面&#xff1a; 因為修改State之后&#xff0c;希望React根據最新的State來重新渲染界面&#xff0c;但這種方式的修改React并不知道數據發生了變化&#xff1b; React并沒有類似于Vue2中的Object.defineP…

SSH密鑰認證 + 文件系統權限控制 + Git倉庫配置+封存與解封GIT倉庫

在本地服務器上實現多個用戶僅通過git push操作修改倉庫、禁止其他改寫方式的需求&#xff0c;可以通過以下步驟實現&#xff1a; 方法概述 通過SSH密鑰認證 文件系統權限控制 Git倉庫配置&#xff0c;確保用戶僅能通過git push命令提交修改&#xff0c;而無法通過直接操作服…