1. 程式人生 > >持續整合平臺搭建:Jenkins,SonarQube

持續整合平臺搭建:Jenkins,SonarQube

首先介紹一下技術:

持續整合工具:Jenkins

程式碼託管:svn或者Git

構建工具:Maven或者Gradle

審查工具:SonarQube

釋出容器:Tomcat或者Docker

其次是系統配置資訊以及一些額外要求:

(1)OS核心需要高於linux5.3,

(2)推薦執行記憶體為8G左右,至少需要大於4G

(3)需要分配額外的使用者和使用者組來執行程式碼審查工具

(4)若需持久化程式碼審查記錄,需要提供一個數據庫(mysql,H2,postgresql等),資料庫的安裝過程在此跳過

(一)下載配置Jenkins

將下載好的war包直接放入tomcat的webapp目錄下,啟動tomcat即可,tomcat的安裝方法不再詳述

此時檢視tomcat的catalina日誌,注意留意Jenkins的初始密碼會在此輸出。

啟動完成後訪問網址http://localhost:8080/jenkins,這時會進行初始化jenkins的一些配置,建議選擇自動安裝系統推薦的外掛包。

建立使用者時,需要提供jenkins的初始密碼,在tomcat的啟動日誌中可以找到。

最後配置完成後,你應該能看到這個畫面

(二)SonarQube的下載和安裝

(1)首先去SonarQube的官網下載SonarQube包,目前最新版本為7.0,而我們則選擇較穩定的LTS版本6.7.2


下載完成後,unzip解壓,我的解壓路徑為/web/sonarqube-6.7.2,同時新增一個使用者和使用者組(SonarQube不能以ROOT使用者執行):

#建立一個名為sonarqube的使用者組和一個使用者名稱為sonarqube密碼為sonarqube的使用者

groupadd sonarqube

useradd sonarqube -g sonarqube -p sonarqube

#為該使用者分配資料夾許可權

chown -R sonarqube:sonarqube /web/sonarqube-6.7.2

(2)之後,編輯sonar.properties文件,修改一些屬性

vim /web/sonarqube-6.7.2/conf/sonar.properties

#設定jvm使用的記憶體大小,Xms最大使用記憶體,Xmx最小使用記憶體,可以根據實際情況自行設定,我目前的系統執行記憶體為8G

sonar.web.javaOpts=-server -Xms1G -Xmx521m -XX:+HeapDumpOnOutOfMemoryError

#配置持久化資料庫的賬戶密碼

sonar.jdbc.username=sonar

sonar.jdbc.password=Sonar6.2

#配置url,我此處使用的mysql

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

#下面設定訪問網址為 http://centos:9000/sonar
sonar.web.host=0.0.0.0
sonar.web.port=9000

sonar.web.context=/sonar

(3)配置啟動引數

vim /web/sonarqube-6.7.2/bin/linux-86-64(此處根據系統記憶體自行選擇)/sonar.sh

修改RUN_AS_USER=sonarqube

即我們之前建立的使用者

(4)啟動sonarqube

#先切換到sonarqube使用者

su sonarqube

#執行啟動命令

cd /web/sonarqube-6.7.2/bin/linux-86-64/

sh sonar.sh start

附sonar啟動命令:

sh sonar.sh start #啟動sonar

sh sonar.sh stop #安全停止sonar

sh sonar.sh console #控制檯啟動sonar

#檢視日誌

cd ../../logs

日誌分為sonar.log,es.log,web.log,若不明原因啟動失敗,可依次檢視這幾個日誌。

啟動後,若日誌檔案均無報錯,即可訪問http://localhost:9000/sonar,若順利,則會出現如下介面


點選login in,輸入初始賬戶密碼admin/admin即可。

若始終無法訪問,建議檢查防火牆設定

(三)Jenkins整合Sonar

(1)在Jenkins中下載sonar外掛,目前外掛為SonarQube Scanner for Jenkins

安裝完成後,在 系統管理->系統設定中,找到SonarQube servers模組,填寫伺服器資訊:

其中認證token需要登陸sonar後,點選Administrator->security->user,點選token按鈕,輸入key後再點選generate進行生成


(2)在jenkins中新建一個自由風格專案

原始碼管理這裡不再詳述,選擇svn或者git都可以,不過git要記得在github上設定好webhook

觸發器也不再此詳述,git的話,勾選GitHub hook trigger for GITScm polling選項,則每次有push操作,都將觸發構建。

構建環境,建議勾選Delete workspace before build starts選項

<1>構建,如果使用gradle進行構建,需要先在 系統管理->全域性工具配置中,配置好gradle的安裝位置,若系統中沒有安裝,建議勾選自動安裝,name隨意輸入,maven構建同理。

gradle構建,選擇invoke gradle,同時在高階選項中,輸入task命令clean build -x test

maven構建,在Goals and options處輸入命令clean compile package -Dmaven.test.skip=true,

<2>執行程式碼分析,新增一個構建步驟,選擇Execute SonarQube Scanner,選擇你的jdk版本,若沒有,請在全域性工具配置中配置好jdk位置。再選擇好sonarqube scanner的版本。

之後,在Analysis properties處,輸入sonar的檢查引數,

#專案key (隨意輸入,必填項)
sonar.projectKey=2017-12-19-job

#專案名稱和版本(必填項)
sonar.projectName=cuimi-job
sonar.projectVersion=1.0

#原始碼位置(必填項,相對於jenkins的workspace路徑,例如,我此時的絕對路徑為~/.jenkins/workspace/Test/test-webapp/src/main/java)
sonar.sources=test-webapp/src/main/java

#編譯後的class位置(必填項,舊版本此項可不填,建議還是填入,相對路徑同上)

sonar.java.binaries=test-webapp/target/classes

後面jvm的啟動引數項,可以參考GC優化策略。新手略過

(3)配置容器併發布專案

這裡有兩種方案

<1>通過ssh將構建完成後的Artifacts 傳送至目標伺服器上,交由其他運維人員處理。

<2>通過tomcat的remote deploy功能遠端釋出專案

方案一:安裝jenkins外掛publish over ssh。安裝完成後在"系統管理"->"系統設定"中,配置Publish over ssh的相關資訊,


注意:外掛預設使用22埠進行連線,請確保目標伺服器22埠的暢通性。

配置完成後,點選Test Configuration,測試連線是否成功。

之後,在專案設定中,新增構建後操作,如圖所示


配置完成後,直接儲存修改即可。

注意,這裡的source files和exec command是二選一的,即可以傳檔案,或者在目標伺服器上執行shell指令碼。但是不能同時兩者都執行。

配置完成後,點選構建。構建成功後即可在sonar地址中登陸訪問進行檢視程式碼掃描情況