jenkins流水線+sonar檢查多模塊maven項目

SonarQube上代碼掃描報告效果圖

多模塊maven項目結構大概如下:

cfw-project            #父工程
       -module-One     #子工程(1)
             -src
                 -main
             -pom.xml
       -module-Two     #子工程(n)
             -src
                 -main
             -pom.xml
       -sonar-project.properties  #文件與子工程同級目錄

準備工作:

  • 宿主機:centos7.5(192.168.1.107 localhost)
  • 安裝Jenkins
    http://www.reibang.com/p/42e2771dcc94
  • 安裝锭碳、漢化SonarQube(8+) + postgres
  • 安裝sonar-scanner
  • 編寫 sonar-project.properties文件
  • 創(chuàng)建jenkins流水線工程,觸發(fā)構建勿璃,查看代碼掃描報告
    備注:
    (1)通過此文章擒抛,不需要在jenkins上安裝sonar插件 (SonarQube Scanner for Jenkins),即不需要在jenkins上配置SonarQube相關配置

1补疑、安裝歧沪、漢化SonarQube(8+) + postgres

編寫docker-compose.yml

mkdir -p /data/sonar   &&  cd /data/sonar
cat docker-compose.yml  #編寫docker-compose.yml
version: '3'
services: 
  postgres: 
    image: postgres    #基礎鏡像名字
    restart: always      #在容器退出時總是重啟容器
    container_name: sonarqube_postgres    #自定義sonarqube容器名字
    ports:
      - 5432:5432   #-宿主機端口:容器暴露端口 ; 即將容器暴露端口映射到宿主機上某個端口
    volumes:
      - /data/sonar/postgres/postgresql:/var/lib/postgresql    #將容器目錄文件映射到宿主機上
      - /data/sonar/postgres/data:/var/lib/postgresql/data
    environment:
      TZ: Asia/Shanghai    #指定容器時區(qū)
      POSTGRES_USER: sonar               #自定義postgres數(shù)據(jù)庫登錄用戶
      POSTGRES_PASSWORD: sonar    #自定義postgres數(shù)據(jù)庫登錄密碼
      POSTGRES_DB: sonar                    #自定義postgres數(shù)據(jù)庫 “庫”
    networks: 
      - sonar-network  #使用文件末定義的網(wǎng)絡模式
  sonarqube:
    image: sonarqube    #8.5.1 
    restart: always 
    container_name: sonarqube_master
    ports:
      - 9000:9000
    volumes:
      - /data/sonar/sonarqube/extensions:/opt/sonarqube/extensions
      - /data/sonar/sonarqube/logs:/opt/sonarqube/logs
      - /data/sonar/sonarqube/data:/opt/sonarqube/data
      - /data/sonar/sonarqube/conf:/opt/sonarqube/conf
    environment:
      SONARQUBE_JDBC_USERNAME: sonar    #指定postgres數(shù)據(jù)庫連接信息
      SONARQUBE_JDBC_PASSWORD: sonar
      SONARQUBE_JDBC_URL: jdbc:postgresql://postgres:5432/sonar
    depends_on:    #指定依賴某個服務 (本實例sonarqube依賴postgres)
      - postgres
    networks: 
      - sonar-network
networks:
  sonar-network:
    driver: bridge   #定義網(wǎng)絡模式為bridge (缺省值bridge; 支持bridge莲组,host诊胞,none,container四種類型)

運行

1锹杈、修改宿主機內核參數(shù)
echo "vm.max_map_count = 655360"  >> /etc/sysctl.conf
sysctl -p
2撵孤、賦權給sonarqube/data目錄下所有目錄、文件
mkdir -p  /data/sonar/sonarqube/data
chmod  -R 777 /data/sonar/sonarqube/data
3竭望、運行SonarQube(8+) + postgres
docker-compose  up -d   #啟動容器
docker ps #查看容器狀態(tài)

容器啟動成功

訪問:http://localhost:9000 #默認用戶密碼都是admin
sonarqube-web.png

漢化

  • 登錄后操作
  • 找到“Chinese Pack”插件邪码,安裝并重啟sonarqube服務即可漢化成功




2、安裝sonar-scanner

  • 由于jenkins服務我是用docker方式安裝(http://www.reibang.com/p/42e2771dcc94
    )咬清,jenkins容器與宿主機環(huán)境隔離闭专,想要jenkins流水線引用sonar-scanner命令,那就把sonar-scanner掃描工具安裝到jenkins容器里面旧烧。
docker cp sonar-scanner-cli-3.2.0.1227-linux.zip  jenkins:/usr/local/    #將壓縮包復制到容器里(前提jenkins容器啟動成功)
docker exec -it jenkins /bin/bash                                        #進入jenkins容器
cd /usr/local
unzip sonar-scanner-cli-3.2.0.1227-linux.zip                             #解壓得到sonar-scanner-3.2.0.1227-linux
ln -s sonar-scanner-3.2.0.1227-linux/bin/sonar-scanner   /usr/sbin/sonar-scanner  #做軟鏈接
sonar-scanner -v    #jenkins容器終端可以直接使用sonar-scanner命令即為安裝影钉、配置成功

3、編寫 sonar-project.properties文件

sonar.projectKey=cfw-project   #自定義項目唯一標識
sonar.projectName=cfw-project  #自定義項目名字
sonar.sourceEncoding=UTF-8
sonar.projectVersion=v3.2    #自定義版本
sonar.ce.workerCount=1
sonar.language=java
sonar.forceAnalysis=true
sonar.ce.workerCount=1
sonar.java.binaries=target/classes
sonar.sources=src/main/java

sonar.host.url=http://192.168.1.107:9000              #指定SonarQube服務地址
sonar.login=88288b599e11b4d86a23ge6r85e81774619c2c8b  #SonarQube服務生成的登錄令牌
#sonar.login相當于登錄用戶 & 密碼
sonar.modules=module-One,module-Two    #多個子工程用逗號隔開
module-One.sonar.projectName=module-One  #子工程名字
module-Two.sonar.projectName=module-Two

SonarQube服務生成登錄令牌


4掘剪、創(chuàng)建jenkins流水線工程平委,觸發(fā)構建,查看代碼掃描報告

  • 當前只有一個多模塊maven項目(cfw-project)夺谁,因為往后會有n個多模塊maven項目肆汹,所以創(chuàng)建jenkins流水線工程時使用“選擇參數(shù)”指定多模塊maven項目


    編寫聲明式Jenkinsfile
pipeline {
    agent any
    options {
        timestamps()    //設置在項目打印日志時帶上對應時間
        disableConcurrentBuilds()   //不允許同時執(zhí)行流水線,被用來防止同時訪問共享資源等
        timeout(time: 5, unit: 'MINUTES')   // 設置流水線運行超過n分鐘予权,Jenkins將中止流水線
        buildDiscarder(logRotator(numToKeepStr: '20'))   // 表示保留n次構建歷史
    }

    //gitlab  webhook觸發(fā)器
    //triggers{
    //   gitlab( triggerOnPush: true,                       //代碼有push動作就會觸發(fā)job
    //       triggerOnMergeRequest: true,                   //代碼有merge動作就會觸發(fā)job
    //        branchFilterType: "NameBasedFilter",          //只有符合條件的分支才會觸發(fā)構建 “ALL/NameBasedFilter/RegexBasedFilter”
    //        includeBranchesSpec: "${JOB_BASE_NAME}")      //基于branchFilterType值昂勉,輸入期望包括的分支的規(guī)則
    //}

    stages{
        stage('Print Message') {      //打印信息
            steps {
                echo '打印信息'
                echo "project: ${Project_name}"
                echo "workspace: ${WORKSPACE}"
                echo "branch: ${Branch_name}"           //gitlab分支名
                echo "build_id: ${BUILD_ID}"
           }
        }
        //此步驟在調試Jenkinsfile時可以注釋以便了解目錄結構
        stage('Delete Workspace') {         //清理工作目錄
            steps {
                echo "清理工作目錄: ${WORKSPACE}"
                deleteDir()     //表示刪除當前目錄(${WORKSPACE})下內容,通常用在構建完畢之后清空工作空間
            }
        }
        stage ('Checkout'){         //拉取代碼
            steps{
                echo '拉取代碼'
                script {
                    checkout([$class: 'GitSCM', branches: [[name: '${Branch_name}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],
                        userRemoteConfigs: [[credentialsId: '7ff3778d-124f-40b1-a5e6-05db20a7e59e',     //gitlab登錄令牌扫腺,設置自行搜索方法
                        url: 'http://192.168.1.101/java/${Project_name}.git']]])    //gitlab項目clone地址
                }
            }
        }
        stage('Sonar-canner') {   //sonar-scanner代碼檢查
            steps {
                echo '代碼檢查'
                dir ('./') {       //指定工作目錄(默認為${WORKSPACE})
                    script {
                        sh 'source /etc/profile && mvn clean package  -Dmaven.test.skip=true'
                        sh 'sonar-scanner'  //執(zhí)行命令開始掃描代碼(前提要maven編譯生成classes文件)
                    }
                }
            }
        }
        
    }
}

觸發(fā)構建流水線工程(代碼掃描報告自動上傳到SonarQube服務)


SonarQube服務上查看代碼掃描報告 http://localhost:9000

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末岗照,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌攒至,老刑警劉巖厚者,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異迫吐,居然都是意外死亡库菲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門志膀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熙宇,“玉大人,你說我怎么就攤上這事溉浙√讨梗” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵戳稽,是天一觀的道長馆蠕。 經常有香客問我,道長惊奇,這世上最難降的妖魔是什么互躬? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮颂郎,結果婚禮上吼渡,老公的妹妹穿的比我還像新娘。我一直安慰自己祖秒,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布舟奠。 她就那樣靜靜地躺著竭缝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沼瘫。 梳的紋絲不亂的頭發(fā)上抬纸,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音耿戚,去河邊找鬼湿故。 笑死,一個胖子當著我的面吹牛膜蛔,可吹牛的內容都是我干的坛猪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼皂股,長吁一口氣:“原來是場噩夢啊……” “哼墅茉!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤就斤,失蹤者是張志新(化名)和其女友劉穎悍募,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洋机,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡坠宴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绷旗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喜鼓。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖刁标,靈堂內的尸體忽然破棺而出颠通,到底是詐尸還是另有隱情,我是刑警寧澤膀懈,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布顿锰,位于F島的核電站,受9級特大地震影響启搂,放射性物質發(fā)生泄漏硼控。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一胳赌、第九天 我趴在偏房一處隱蔽的房頂上張望牢撼。 院中可真熱鬧,春花似錦疑苫、人聲如沸熏版。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撼短。三九已至,卻和暖如春挺勿,著一層夾襖步出監(jiān)牢的瞬間曲横,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工不瓶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留禾嫉,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓蚊丐,卻偏偏與公主長得像熙参,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子麦备,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容