Tomcat+Jenkins+SonarQube+SVN+Maven 集成自動化環境搭建(Windows10環境下)


說在前面的話: 從接到任務到完成共用了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的路徑。

對項目進行配置

 

 

 

 

 配置完成之后,保存。 構建項目,如下

構建成功之后,如下圖點擊即可查看檢測結果,如果沒有這個選項,說明集成失敗。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM