持續整合平臺搭建: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/sonarsonar.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地址中登陸訪問進行檢視程式碼掃描情況