說在前面的話: 從接到任務到完成共用了7天的時間。正常人用不到這個時間。 此時的功能表現是: 登錄本地JenKins對項目進行構建,能夠自動從SVN讀取最新代碼並按照Maven項目構建,構建完成能夠自動使用SonarQube分析代碼質量,並將構建的War包部署到指定容器中。
版權聲明:此博客純手打,個人創作,轉載請注明出處
導圖:
環境准備:MySQL5.7、 Tomcat7.0.93、Tomcat8.5.30、JenKins2.160、SonarQube7.6+Sonar Scanner3.3.0、Maven3.3.3、SVN1.8.22、Window10
環境需要注意的地方:SonarQube對數據庫的版本要求相對比較嚴格,請配置版本對應的SonararQube+MySQL,其他的版本搭建過程中暫沒有發現異常。
查看SonarQube支持的MySQL版本:在SonarQube的解壓縮文件夾中的conf文件夾中打開sonar.properties配置文件,找到帶有MySQL字樣的注釋,會看到“#----- MySQL >=5.6 && <8.0” 或者 “#----- MySQL 5.6 or greater”。 意思是版本在5.6和8.0或者5.6以上。 這里建議盡量將MySQL版本靠近但不是下限的版本,我的之前裝的8.3的后來不能用又卸載重新安裝的5.7; 如果自己不想裝數據庫,SonarQube自帶的有MySQL數據庫,自帶的沒有用過,過程請另找資料。 其他數據庫與此類似。
MySQL配置
第一步:用工具或者控制台創建MySQL用戶並給權限(表和視圖的創建、用戶的創建、索引的創建等權限,這里推薦使用Navicat工具比較方便)。
第二步:用第一步創建的用戶登錄MySQL並創建名為sonar(可以自定義)的數據庫。
至此MySQL配置完成!
SonarQube安裝
第一步:進入SonarQube解壓縮文件夾的bin文件夾運行StartSonar.bat文件,打開瀏覽器輸入localhost:9000 出現如下圖表示安裝成功
下面就是配置SonarQube
SonarQube配置
第一步:配置SonarQube數據庫連接參數--> 在SonarQube解壓縮的conf文件夾中找到sonar.properties配置文件,在有MySQL注釋的下方添加如下配置
sonar.jdbc.url=jdbc:mysql://192.168.163.120:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.sorceEncoding=UTF-8 sonar.login=admin sonar.password=admin
sonar.jdbc.url是數據庫了解的驅動;其中的sonar指的是上面創建的MySQL數據庫的數據庫,其他參數不變
sonar.jdbc.username和sonar.jdbc.userpassword指的是上面創建的數據庫用戶和密碼, 注意:不要試圖去用MySQL數據庫的root用戶配置連接參數,這里告訴你行不通。
sonar.login和sonar.password指的是一會兒啟動SonarQube之后登陸用的賬號密碼;可以自定義
第二步:進入SonarQube解壓縮文件夾下的bin目錄找到對應系統的文件夾進去之后分別執行 InstallNTService.bat(以管理員身份運行)、StartNTService.bat(以管理員身份運行)、StartSonar.bat對數據庫進行初始化;第一次運行StartSonar.bat時可能會秒退,如果沒有秒退那就更好;如果秒退那么進入SonarQube解壓縮文件夾下的logs文件夾打開sonar.log日志文件看是否有報錯,如果沒有報錯那么說明SonarQube已經啟動,接下來查看MySQL數據庫SonarQube連接的用戶下是否有一下表
如果上述一切正常,這時候就可以打開瀏覽器輸入地址 localhost:9000 來登錄SonarQube了。第一次登錄時需要初始化數據庫需要等待一會兒。
常見異常說明:在啟動SonarQube的時候,如果有異常控制台也會秒退,這個時候就要去sonar.log文件查看異常信息,如果異常是“遠程主機斷開了一個連接”, 那就是SonarQube初始化數據庫的時候有異常,這時候就去解壓縮文件夾下的logs文件夾中的web.log文件查看具體的報錯信息; 我見到的異常是SonarQube執行的SQL語法不對,開什么玩笑sonarqube作者還能把sql寫錯了?。 實際就是MySQL版本不對導致的。這個時候就要考慮換MySQL了。
第三步:安裝常用插件按照下圖
搜索chinese Pack,安裝中文語言包, 有的war包已經默認的有中文插件包,那么此步就可以略過了。裝完插件重啟JenKins即可
重啟方法: 在啟動的控制台按ctrl+c輸入y回車即可停止SonarQube ,再次運行StartSonar.bat文件即可。
第四步:進行項目分析
說明: SonarQube項目分析分為兩種,一種是用SonarQube本身的命令; 另一種是用SonarQube的Sonar Scanner掃描儀進行分析; 前一種配置太繁瑣,我就沒有深究;我用的第二種;
1. 下載Sonar Scanner掃描儀
將文件解壓縮,可以放置到任意目錄下。
2. 配置Sonar Scanner環境變量
在path中添加 D:\Desktop\sonar-scanner-cli-3.3.0.1492-windows\sonar-scanner-3.3.0.1492-windows\bin 此目錄指的是Sonar Scanner解壓縮文件夾的bin目錄。
3. 在要分析的項目中與pom.xml同級目錄中創建sonar-project.properties配置文件,文件內容如下
# must be unique in a given SonarQube instance
sonar.projectKey=personnel-data-sys-1
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=personnel-data-sys
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "/" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=web.dao/src,web.pojo/src,web.service/src,web.vo/src
sonar.java.binaries=D:/Eclipse-jee-2018-09/WorkSpace/HuiMeng(HeNan)/trunk/personnel-data-sys/personnel-data-sys/personnel-data-sys/web.dao/target/classes,
D:/Eclipse-jee-2018-09/WorkSpace/HuiMeng(HeNan)/trunk/personnel-data-sys/personnel-data-sys/personnel-data-sys/web.pojo/target/classes,
D:/Eclipse-jee-2018-09/WorkSpace/HuiMeng(HeNan)/trunk/personnel-data-sys/personnel-data-sys/personnel-data-sys/web.service/target/classes,
D:/Eclipse-jee-2018-09/WorkSpace/HuiMeng(HeNan)/trunk/personnel-data-sys/personnel-data-sys/personnel-data-sys/web.vo/target/classes
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
參數說明:
sonar.projectKey: 指的是分析的項目上傳到SonarQube之后的唯一憑證, 自定義。
sonar.projectName: 指的是分析的項目上傳到SonarQube之后的名稱,自定義。
sonar.projectVersion: 版本號,自定義
sonar.sources: 被分析的源碼的位置,切記這個路徑只能是相對路徑,相對此配置文件的路徑。 多個路徑用英文逗號隔開
sonar.java.binaries: 被分析的源碼的class文件的路徑。這個可以是絕對路徑。就是本地從svn檢下來的項目的路徑。如果沒有,用maven命令編譯一下項目生成即可。或者用eclipse編譯也行。只要把class文件弄出來就行
sonar.sourceEncoding: 編碼
上述參數配置完之后, 打開控制台,將路徑切換到項目的pom.xml所在的目錄下,執行 sonar-scanner 命令提示成功之后, 登錄SonarQube就會看到分析的結果。
其他的掃描儀的用法請參見官方文檔: https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
至此單獨的SonarQube就可以使用了。
JenKins篇
JenKins下載安裝配置
JenKins的安裝有兩種形式, 一種是安裝包的形式,另一種是war包的形式,這里介紹war包的形式。
從登錄官網下載JenKins.war; 將war包原封不動的拷貝到Tomcat的webapps文件夾下,啟動Tomcat。訪問localhost:8080/jenkins,出現下圖即可以正常使用jenkins了
第一次登錄jenkins時需要解鎖jenkins。 就是找到上圖紅色字體路徑的文件復制里面的密匙。到下方文本框,點擊ok即進入插件安裝界面,如下圖。
點擊安裝推薦的插件,進行插件的安裝,如果是剛入門難,建議安裝推薦的插件。如果不想安裝推薦的,那么就選擇右邊這個自己選擇安裝的插件。如果安裝推薦的插件會進入下圖
一般情況下推薦的插件中就有中文包,如果沒有那么就去“系統管理-->插件管理-->可選插件(第二個),搜索Localization: Chinese(不同版本的jenkins可能名字不同), 選擇Localization: Chinese (Simplified)安裝即可,”等待所有的插件安裝完成,進入創建用戶的界面,如下圖
創建完用戶之后,就進入了首頁, 下面開始常用工具的配置, 進行工具配置的前提是要安裝了相應的插件, 如Maven等,否則就不會有相應的選項
在“系統管理-->插件管理”的“可選插件”中搜索 Maven Integration plugin 點擊進行maven插件的安裝。 JDK就搜索 JDK Tools plugin進行JDK插件的安裝
點擊JDK安裝
填寫參數
往下找,找到maven配置項,如下圖
點擊maven安裝
暫時先配置這兩個工具。
JenKins的使用
點擊新建任務
如果沒有“構建maven項目 ”這個選項,說明Maven Integration plugin這個maven插件沒有安裝,去裝一下maven插件即可。
下面進行參數配置,各個參數的詳解如下圖。
參數填寫完成,保存之后,回到首頁, 構建項目,如下
在此處查看日志輸出。
到最后提示 SUCCESS 成功之后,標識項目構建完成,恭喜你jenkins可以正常使用,當然了僅僅完成構建是沒有任何意義的,下面要讓Jenkins構建完成后可以自動將war包部署到tomcat容器
JenKins自動部署war包到Tomcat配置
思路:在構建之前運行windows命令停掉tomcat,;在構建完成之后,將構建生成的war包拷貝到目標tomcat的webapps目錄下,再執行windows命令啟動tomcat
說明:這個時候不能把war包部署到jenkins所在的tomcat了,因為在構建之前要停掉tomcat如果與jenkins配置同一個tomcat,那么Jenkins的tomcat停了jenkins就無法工作了
這個時候就要再用一個tomcat,但這時會有一個問題就是,兩個tomcat的啟動和停止腳本不能各自識別自己的tomcat,會出現運行任一個停止的腳本,就會把啟動着的tomcat停掉,而不作區分;如果執行啟動腳本,那么第二個啟動的會端口沖突。解決辦法如下
1. 配置環境變量為:CATALINA_HOME1=D:\Desktop\apache-tomcat-7.0.93(部署war包的tomcat的解壓縮文件夾根目錄)
CATALINA_BASE1=D:\Desktop\apache-tomcat-7.0.93(部署war包的tomcat的解壓縮文件夾根目錄), 與CATALINA_HOME1的值相同,
並且要為jenkins所在的tomcat配置CATALINA_BASE=D:\Tomcat\apache-tomcat-8.5.30
所在就會有如下環境環境變量
jenkins所在的tomcat
CATALINA_BASE=D:\Tomcat\apache-tomcat-8.5.30
CATALINA_HOME=D:\Tomcat\apache-tomcat-8.5.30
部署項目的tomcat
CATALINA_BASE1=D:\Desktop\apache-tomcat-7.0.93
CATALINA_HOME1=D:\Desktop\apache-tomcat-7.0.93
找到部署項目的tomcat的bin文件夾下的startup.bat和shutdown.bat文件,將其中的CATALINA_HOME替換為CATALINA_HOME1
找到部署項目的tomcat的bin文件夾下的catalina.bat文件,將其中的CATALINA_HOME替換為CATALINA_HOME1移機CATALINA_BASE替換為CATALINA_BASE1保存即可,
這時候即可同時啟動兩個,並且停的時候也只停相應的。
在path環境變量中添加 %CATALINA_HOME1%\bin 因為jenkins所在的tomcat不需要經常的啟動和停止,如果需要停止和啟動,手動就行了, 所以這里配成了部署項目的tomcat
JenKins配置如下;
項目構建之前執行命令
項目構建完成后執行命令
配置完命令,之后再去配置 構建參數如下圖
配置此參數的原因是,如果單單的配置構建完成之后執行啟動tomcat的命令,那么jenkins就會以衍生線程來開啟控制台執行命令,但是當jenkins構建完成,默認就會把當前線程和所有的衍生線程全部殺掉,那么這時候就會導致啟動的tommcat被殺掉,那么tomcat還是沒有啟動起來。 添加此參數的作用就是,改變衍生線程的ID, 讓jenkins在構建完成之后,無法識別啟動tomcat的線程是自己的衍生線程就可以了。 此參數不能再“系統管理-->節點管理”添加環境變量中配置,在那配置的話會導致jenkins一直等待啟動tomcat的線程結束,並且Jenkins認為這個不是衍生線程也不會殺掉,就會一直等待,直到構建失敗。
只是做這些還是不夠,如果編譯報出 此處不應有=2048"" 字樣,原因是jenkins執行腳本的時候把一個雙引號會轉義為兩個雙引號。 打開tomcat下的bin目錄中的catalina.bat文件,搜索2048, 將2048的引號去掉,如下
由
if not "%JSSE_OPTS%" == "" goto gotJsseOpts
set JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
:gotJsseOpts
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
變為
if not '%JSSE_OPTS%' == '' goto gotJsseOpts
set JSSE_OPTS=-Djdk.tls.ephemeralDHKeySize=2048
:gotJsseOpts
set JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS% 即可。
如果沒有報錯,那就不用做此修改。
到此jenkins自動部署項目完成。
JenKins集成SonarQube
集成之后的效果是,當構建完成之后,自動檢測代碼質量,並上傳檢測結果到sonarqube。這里也使用Sonar Scanner掃描儀進行集成
登錄sonarqube生成token
點擊Administrator->security->user,點擊token按鈕,輸入key后再點擊generate進行生成, 並保存好。
安裝SonarQube Scanner for Jenkins 插件
對jenkins進行配置
安裝完成后,在 系統管理->系統設置中,找到SonarQube servers模塊,填寫服務器信息:
其中Server authentication token 就是上面登錄sonarqube生成的token. 拷貝進來即可。
“系統管理-->全局工具配置”
點擊安裝,如下圖
注意配置的是Sonar Scanner掃描儀的路徑,可不是Sonarqube的路徑。
對項目進行配置
配置完成之后,保存。 構建項目,如下
構建成功之后,如下圖點擊即可查看檢測結果,如果沒有這個選項,說明集成失敗。