持續集成Jenkins+sonarqube部署教程

1 引言

1.1 文檔概要

本文主要介紹jenkins,sonar的安裝與集成,基於ant,maven構建。用一個例子介紹jenkins的編譯打包部署,代碼檢查。最後集成jenkins。(現階段只是簡易的集成,後續須要修改accio源碼作深度集成)html

1.2 預計讀者

系統配置管理員:要懂得搭建持續集成環境,有問題能夠排查;
架構師:瞭解持續集成實現原理,協助項目接入持續集成。項目在持續集成環境運行中,進行維護、分析構建異常等;
維護人員:重啓服務、排查環境問題、項目接入支持;java

1.3 關於持續集成

提供一套能夠持續集成項目流程。可以給接入的項目提供每日構建、自動化測試的支持,提升項目質量、節省項目成本。mysql

2 預裝軟件

軟件名稱 平臺 備註
jdk1.7.0_17 Win7 操做系統
apache-ant-1.9.6 Win7 Ant
apache-tomcat-6.0.13 Win7 Tomcat容器linux

3 安裝列表

軟件名稱 平臺 備註
Jenkins Win7 端口 8080
sonarqube-5.1.2 Win7 端口 9000
sonar-runner-2.4 Win7 
nexus-2.7.1-01 Linux Maven私有服務web

4 jenkins安裝步驟

4.1 安裝Jenkins服務端

從jenkins官網下載jenkins:https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins點擊「download jenkins.war」sql

下載的爲jenkins.zip將其更改成jenkins.war包,有兩種運行方式
1. 運行 java -jar jenkins.war,採用內置jetty服務器。
2. 將下載的war包文件部署到 servlet 容器,而後啓動容器(推薦這種方式)。
用瀏覽器打開http://localhost:8080/ jenkins,訪問Jenkins主頁。
數據庫

安裝成功!apache

4.2 修改jenkins工做空間

Jenkins的默認工做間在C:\Users\xxxxxx.jenkins,修改工做空爲間D:\jenkins,只須要添加環境變量
JENKINS_HOME=D:\jenkins

重啓jenkins;瀏覽器

4.3 基本配置

配置JAVA_HOME \ANT_HOME\。只有配置了這三項,Jenkins才能支持Ant構建的Jave項目。
地址:
JAVA_HOME=D:\Program Files (x86)\Java\jdk1.7.0_17
ANT_HOME=D:\ant-1.6.5tomcat

用瀏覽器打開http://localhost:8080/ ,訪問Jenkins主頁。
點擊「系統管理」頁面

1. Utf-8編碼
Your container doesn't use UTF-8 to decode URLs. If you use non-ASCII characters as a job name etc, this will cause problems. See Containers and Tomcat i18n for more details.

Jenkins建議在tomcat中使用utf-8編碼,配置tomcat下conf目錄的server.xml文件

2.系統設置
在已運行的Jenkins主頁中,點擊左側的系統管理—>系統設置進入以下界面:

3.JDK、Ant配置


4.Jenkins Location配置

5.郵件通知配置

注意:若是使用qq郵箱須要開通SMTP服務,打開郵箱點擊「設置」》「帳戶」

4.4 郵件插件安裝

Jenkins默認的郵件發送功能很是弱,多人發送、按狀況發送、郵件模板都支持很差,所以須要按照加強版的郵件插件。
用瀏覽器打開http://localhost:8080/ ,訪問Jenkins主頁。
點擊「系統管理」-》「管理插件」

選擇「可選插件」卡片,顯示出全部能夠下載安裝的插件。選擇「Email Extension Plugin」插件,點擊 按鈕。

等待插件安裝完成後,登陸到服務器上,重啓Jenkins服務!
服務重啓後,用瀏覽器打開http://localhost:8080/ ,訪問Jenkins主頁。
點擊「系統管理」-》「系統設置」
看到「Extended E-mail Notification」主題配置單元,就證實配置成功。


email-ext插件容許使用變量來動態插入數據到郵件的主題和內容主體中。變量是一個以$(美圓符號)開始,並以空格結束的字符串。當一個郵件觸發時,主題和內容主體字段的全部變量都會經過真實的值動態地替換。一樣,變量中的「值」能包含其它的變量,都將被替換成真實的內容。

郵件的內容以下:

項目名稱:$PROJECT_NAME



構建編號:$BUILD_NUMBER



svn版本號:${SVN_REVISION}



構建狀態:$BUILD_STATUS



觸發緣由:${CAUSE}



構建日誌地址:${BUILD_URL}console



構建地址:$BUILD_URL



變動集:${JELLY_SCRIPT,template="html"}



全局屬性詳解
1. Override Global Settings:若是不選,該插件將使用默認的E-mail Notification通知選項。反之,您能夠經過指定不一樣於( 默認選項)的設置來進行覆蓋。
2. Default Content Type:指定構建後發送郵件內容的類型,有Text和HTML兩種.
3. Use List-ID Email Header:爲全部的郵件設置一個List-ID的郵件信頭,這樣你就能夠在郵件客戶端使用過濾。它也能阻止郵件發件人大部分的自動回覆(諸如離開辦公室、休假等等)。你可使用你習慣的任何名稱或者ID號,可是他們必須符合以下其中一種格式(真實的ID必需要包含在<和>標記裏):

Build Notifications 
「Build Notifications」 
關於更詳細的List-ID說明請參閱RFC-2919.
4. Add 'Precedence: bulk' Email Header:設置優先級,更詳細說明請參閱RFC-3834.
5. Default Recipients:自定義默認電子郵件收件人列表。若是沒有被項目配置覆蓋,該插件會使用這個列表。您能夠在項目配置使用$ DEFAULT_RECIPIENTS參數包括此默認列表,以及添加新的地址在項目級別。添加抄送:cc:電子郵件地址例如,CC:someone@somewhere.com
6. Reply To List:回覆列表, A comma separated list of e-mail addresses to use in the Reply-To header of the email. This value will be available as $DEFAULT_REPLYTO in the project configuration.
7. Emergency reroute:若是這個字段不爲空,全部的電子郵件將被單獨發送到該地址(或地址列表)。
8. Excluded Committers:防止郵件被郵件系統認爲是垃圾郵件,郵件列表應該沒有擴展的帳戶名(如:@domain.com),而且使用逗號分隔
9. Default Subject:自定義郵件通知的默認主題名稱。該選項能在郵件的主題字段中替換一些參數,這樣你就能夠在構建中包含指定的輸出信息。
10. Maximum Attachment Size:郵件最大附件大小。
11. Default Content:自定義郵件通知的默認內容主體。該選項能在郵件的內容中替換一些參數,這樣你就能夠在構建中包含指定的輸出信息。
12. Default Pre-send Script:默認發送前執行的腳本(注:grooy腳本,這是我在某篇文章上看到的,不必定準確)。
13. Enable Debug Mode:啓用插件的調試模式。這將增長額外的日誌輸出,構建日誌以及Jenkins的日誌。在調試時是有用的,但不能用於生產。
14. Enable Security:啓用時,會禁用發送腳本的能力,直接進入Jenkins實例。若是用戶試圖訪問Jenkins管理對象實例,將拋出一個安全異常。
15. Content Token Reference:郵件中可使用的變量,全部的變量都是可選的。
郵件:

詳細配置能夠參考 https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin

4.5 權限插件安裝

點擊「系統管理」-》「管理插件」》「可選插件」 在搜索框輸入「Role-」點「直接下載」


點擊「系統管理」-》「Configure Global Security」

點擊「系統管理」-》「Manage and Assign Roles」

點擊「Manage Role」,Role to add 新增角色。

點擊點擊「系統管理」》「管理用戶」新增用戶

點擊「Assign Roles」,User/group to add ,給用戶添加相應的權限

注意: 若是給anonymous新增admin權限,系統不用登錄也具備admin權限,因此其餘的角色權限都是失效狀態。

4.6 自動部署插件安裝

點擊「系統管理」-》「管理插件」》「可選插件」搜索「Deploy to container Plugin」,「直接下載」

配置tomcat權限,在tomcat的conf目錄下修改tomcat-users.xml,添加一下內容。










4.7 構建一個自由風格的項目

在已運行的Jenkins主頁中,點擊左側的新建Job進入以下界面:

輸入項目名稱選擇jdk(jdk已經在全局配置中配置)

填寫項目的snv地址

配置觸發器 ,「H/15 * ***」表示每一個15分鐘檢查svn有沒有更新,有更新則從新打包。

選擇項目構建工具,本例中使用ant,ant已經在全局配置中配置。

配置構建完成自動部署,部署須要安裝deploy插件,安裝方法同郵件插件安裝。若是是集羣部署則須要點擊「Add Container」新增須要部署的容器。

看到以下日誌說明部署成功

配置郵件插件

點擊「保存」。進行項目構建,點擊「當即構建」

點擊構建日期右邊的小三角, 

點擊「Console Output」查看構建日誌

測試項目自動構建打包,打包完成後部署到遠程服務器。

5 Sonar安裝

5.1 Sonar安裝

下載sonar http://www.sonarqube.org/downloads/,下載後sonar是一個zip包解壓便可。
下載完後解壓客戶端,隨意放置一個地方
如 我放置於D:\
進入進入D:\sonarqube-5.1.2\bin這裏須要注意,選擇32或者64是對應你配置的JDK)

建立數據庫,默認數據庫H2,這裏咱們修改成mysql
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
建立用戶
CREATE USER 'sonar' IDENTIFIED BY 'sonar'; 
給用戶受權
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar'; 
FLUSH PRIVILEGES;

修改sonar.properties文件

添加以下內容,sonar默認自帶mysql驅動。
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://10.10.5.64:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true 
sonar.jdbc.driverClassName=com.mysql.jdbc.Driver

運行「StartSonar.bat」

訪問9000端口,sonar默認自帶了jetty服務器。默認用戶名密碼 admin、admin。一些設置和菜單隻有在登錄以後才能看到。

安裝sonar漢化包,點擊「配置」》「系統」》「更新中心」》「Arailable Plugins」選擇「Chinese Pack」,因爲我已經安裝了漢化包因此沒有列出。


安裝完成後在「installed Plugins」能夠看到該插件。記得重啓後,記得刷新一下瀏覽器

5.2 安裝sonar-runner

下載:http://www.sonarqube.org/downloads/

下載後解壓

修改conf目錄下的sonar-runner.properties文件,新增以下內容,數據庫

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://10.10.5.64:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true 
sonar.jdbc.driverClassName=com.mysql.jdbc.Driver
配置環境變量,將D:\sonar-runner-2.4\bin 添加到Path

在項目的根目錄下添加文件sonar-project.properties

文件內容以下
sonar.projectKey=HotelMonitor
sonar.projectName=HotelMonitor
sonar.projectVersion=1.2
sonar.sources=src
sonar.sourceEncoding=UTF-8
sonar.language=java

在「開始」》「運行」中輸入cmd切換的項目更目錄 輸入「sonar-runner」

看到以下日誌,說明代碼校驗成功

登錄http://localhost:9000/ 查看代碼掃描結果

點擊項目名稱查看校驗詳情

6 Jenkins與sonar集成

6.1 Jenkins配置

點擊點擊「系統管理」》「系統設置」
配置sonar-runner有兩種方式
第一種jenkins自動安裝sonar-runner

第二種 使用現有安裝

6.2 sonar配置


點擊「保存」。
在項目中配置sonar代碼分析
點擊項目名稱進入項目配置,選擇「新增構建步驟」,選擇「invoke Standalone Sonar Analysis」

做以下配置

點擊「保存」

將項目根目錄下的sonar-runner.properties提交svn,
執行「當即構建」
看到jenkins的控制檯輸出以下日誌,校驗成功


訪問http://localhost:9000/dashboard/index/HotelMonitor
查看校驗結果。

若果本地安裝了sonar-runner,能夠運行本地bat腳本的方式運行sonar-runner,配置以下,前提是必須將sonar-runner加入的環境變量, 選擇「增長構建步驟」

輸入bat腳本

修改sonar配置,作以下配置,打開sonar配置頁面,配置「disable the SCM Sensor」爲「是」

不然會報以下錯誤

7 Maven安裝與maven私服的搭建

7.1 Maven安裝

在maven官網下載maven
http://maven.apache.org/download.cgi
下載apache-maven-3.1.1-bin.zip並解壓

配置環境變量

打開cmd窗口數據 mvn –v 查看maven版本,打印以下表示安裝成功。

7.2 Maven私服nexus安裝

下載nexus http://www.sonatype.org/nexus/go/,我下載的是linux版本。

nexus-latest-bundle.tar.gz
將安裝包複製到須要安裝的機器,我安裝在/opt/soft/nexus
tar –zxvf nexus-latest-bundle.tar.gz
解壓後會出現兩個目錄

cd nexus-2.7.7-01/bin
./nexus 
輸出以下:

列出了nexus的各類命令
./nexus start 啓動服務
而後在本機訪問http://localhost:8081/nexus,默認用戶名密碼:admin,admin123

若是是遠程機訪問還須要開通8081端口,操做以下:
/sbin/iptables -I INPUT -p tcp --dport 8081 -j ACCEPT #開啓8081端口 
/etc/rc.d/init.d/iptables save #保存配置 
/etc/rc.d/init.d/iptables restart #重啓服務 
查看端口是否已經開放 
/etc/init.d/iptables status

7.3 Nexus配置

hosted 類型的倉庫,內部項目的發佈倉庫
releases 內部的模塊中release模塊的發佈倉庫
snapshots 發佈內部的SNAPSHOT模塊的倉庫
3rd party 第三方依賴的倉庫,這個數據一般是由內部人員自行下載以後發佈上去
proxy 類型的倉庫,從遠程中央倉庫中尋找數據的倉庫
group 類型的倉庫,組倉庫用來方便咱們開發人員進行設置的倉庫
點擊「Repositories」》「central」》「configuration」

設置「Download Remote Indexes」爲true 
設置「Remote Storage Location」爲:http://repo1.maven.org/maven2/

配置完成保存以後,在「central」中右鍵「repair index」,下載索引

在「browse Index」查看下載的索引

注意:若是沒有下載到索引多是由於nexus安裝的目錄下sonatype-work目錄沒有修改權限,給文件夾賦權便可;
Chmod 777 –R sonatype-work

修改maven安裝目錄conf下的settings.xml文件添加以下代碼
1.在profiles節點下添加



nexus
nexus
http://10.10.152.174:8081/nexus/content/groups/public/

true


true




在settings節點下添加

central

 </activeProfiles>

在services節點下添加

releases 
admin 
admin123 


snapshots 
admin 
admin123 

在項目的pom文件中添加

<distributionManagement>         <repository>                 <id>releases</id>                 <name>Nexus Release Repository</name>                 <url>http://10.10.152.174:8081/nexus/content/repositories/releases/</url>         </repository>         <snapshotRepository>                 <id>snapshots</id>                 <name>Nexus Snapshot Repository</name>                 <url>http://10.10.152.174:8081/nexus/content/repositories/snapshots/</url>         </snapshotRepository> </distributionManagement>

而後執行clean deploy

或者在eclipse中輸入命令執行

查看私服部署的jar包

7.4 Nexus上傳jar包

右鍵「3rd party」

在索引中查看上傳的jar包

若是要引用該jar包只須要將描述中的xml添加到項目引用的opm文件中

7.5 Maven相關命令

help:system能夠打印全部可用的環境變量和Java系統屬性。
help:effective-pom用於查看當前生效的POM內容,指合併了全部父POM(包括Super POM)後的XML,因此可用於檢測POM中某個配置是否生效
help:effective-settings可用於查看當前生效的settings.xml文件內容,因此可用於判斷某個settings配置是否生效
mvn help:describe 你是否由於記不清某個插件有哪些goal而痛苦過,你是否由於想不起某個goal有哪些參數而苦惱,那就試試這個命令吧,它會告訴你一切的. 參數: 1. -Dplugin=pluginName 2. -Dgoal(或-Dmojo)=goalName:與-Dplugin一塊兒使用,它會列出某個插件的goal信息,若是嫌不夠詳細,一樣能夠加-Ddetail.(注:一個插件goal也被認爲是一個 「Mojo」) 下面你們就運行mvn help:describe -Dplugin=help -Dmojo=describe感覺一下吧!
mvn archetype:generate 你是怎麼建立你的maven項目的?是否是像這樣:mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.ryanote -Dartifact=common,若是你還再用的話,那你就out了,現代人都用mvn archetype:generate了,它將建立項目這件枯燥的事更加人性化,你不再須要記那麼多的archetypeArtifactId,你只需輸入archetype:generate,剩下的就是作」選擇題」了.
mvn tomcat:run 用了maven後,你不再須要用eclipse裏的tomcat來運行web項目(實際工做中常常會發現用它會出現不一樣步更新的狀況),只需在對應目錄(如/ryanote)裏運行 mvn tomat:run命令,而後就可在瀏覽器裏運行http://localhost:8080/ryanote查看了.若是你想要更多的定製,能夠在pom.xml文件里加下面配置: 01 02 03 04 org.codehaus.mojo 05 tomcat-maven-plugin 06 07 /web 08 9090 09 10 11 12 固然你也能夠在命令里加參數來實現特定的功能,下面幾個比較經常使用: 1. 跳過測試:-Dmaven.test.skip(=true) 2. 指定端口:-Dmaven.tomcat.port=9090 3. 忽略測試失敗:-Dmaven.test.failure.ignore=true 固然,若是你的其它關聯項目有過更新的話,必定要在項目根目錄下運行mvn clean install來執行更新,再運行mvn tomcat:run使改動生效.
mvnDebug tomcat:run 這條命令主要用來遠程測試,它會監聽遠程測試用的8000端口,在eclipse裏打開遠程測試後,它就會跑起來了,設斷點,調試,一切都是這麼簡單.上面提到的那幾個參數在這裏一樣適用.
mvn dependency:sources 故名思義,有了它,你就不用處處找源碼了,運行一下,你項目裏所依賴的jar包的源碼就都有了

8 Jenkins,maven,sonar集成

8.1 集成

默認jenkins已經安裝了maven插件

在jenkins「系統管理」》「系統設置」中添加jenkins配置,也可使用「自動安裝」

新建一個maven項目,在「項目配置」中輸入svn地址

添加sonar代碼分析,在「增長構建後操做步驟」選擇「sonar」

點擊「保存」後進行項目構建,能夠看到jenkins從私服上下載相關依賴jar包

訪問http://localhost:9000/ 查看sonar生成的代碼監測報告

相關文章
相關標籤/搜索