本文主要介紹jenkins,sonar的安裝與集成,基于ant,maven構(gòu)建。用一個(gè)例子介紹jenkins的編譯打包部署,代碼檢查。最后集成jenkins。(現(xiàn)階段只是簡(jiǎn)易的集成,后續(xù)需要修改accio源碼做深度集成)
系統(tǒng)配置管理員:要懂得搭建持續(xù)集成環(huán)境,有問題可以排查;
架構(gòu)師:了解持續(xù)集成實(shí)現(xiàn)原理,協(xié)助項(xiàng)目接入持續(xù)集成。項(xiàng)目在持續(xù)集成環(huán)境運(yùn)行中,進(jìn)行維護(hù)、分析構(gòu)建異常等;
維護(hù)人員:重啟服務(wù)、排查環(huán)境問題、項(xiàng)目接入支持;
提供一套可以持續(xù)集成項(xiàng)目流程。能夠給接入的項(xiàng)目提供每日構(gòu)建、自動(dòng)化測(cè)試的支持,提高項(xiàng)目質(zhì)量、節(jié)省項(xiàng)目成本。
軟件名稱 平臺(tái) 備注jdk1.7.0_17 Win7 操作系統(tǒng)apache-ant-1.9.6 Win7 Antapache-tomcat-6.0.13 Win7 Tomcat容器
軟件名稱 平臺(tái) 備注Jenkins Win7 端口 8080sonarqube-5.1.2 Win7 端口 9000sonar-runner-2.4 Win7 nexus-2.7.1-01 Linux Maven私有服務(wù)
從jenkins官網(wǎng)下載jenkins:https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins點(diǎn)擊“download jenkins.war”
下載的為jenkins.zip將其更改為jenkins.war包,有兩種運(yùn)行方式
1. 運(yùn)行 java -jar jenkins.war,采用內(nèi)置jetty服務(wù)器。
2. 將下載的war包文件部署到 servlet 容器,然后啟動(dòng)容器(推薦這種方式)。
用瀏覽器打開http://localhost:8080/ jenkins,訪問Jenkins主頁(yè)。
安裝成功!
Jenkins的默認(rèn)工作間在C:\Users\xxxxxx.jenkins,修改工作空為間D:\jenkins,只需要添加環(huán)境變量
JENKINS_HOME=D:\jenkins
配置JAVA_HOME \ANT_HOME\。只有配置了這三項(xiàng),Jenkins才能支持Ant構(gòu)建的Jave項(xiàng)目。
地址:
JAVA_HOME=D:\Program Files (x86)\Java\jdk1.7.0_17
ANT_HOME=D:\ant-1.6.5
用瀏覽器打開http://localhost:8080/ ,訪問Jenkins主頁(yè)。
點(diǎn)擊“系統(tǒng)管理”頁(yè)面
Jenkins建議在tomcat中使用utf-8編碼,配置tomcat下conf目錄的server.xml文件
2.系統(tǒng)設(shè)置
在已運(yùn)行的Jenkins主頁(yè)中,點(diǎn)擊左側(cè)的系統(tǒng)管理—>系統(tǒng)設(shè)置進(jìn)入如下界面:
3.JDK、Ant配置
Jenkins默認(rèn)的郵件發(fā)送功能非常弱,多人發(fā)送、按情況發(fā)送、郵件模板都支持不好,因此需要按照增強(qiáng)版的郵件插件。
用瀏覽器打開http://localhost:8080/ ,訪問Jenkins主頁(yè)。
點(diǎn)擊“系統(tǒng)管理”-》“管理插件”
等待插件安裝完成后,登錄到服務(wù)器上,重啟Jenkins服務(wù)!
服務(wù)重啟后,用瀏覽器打開http://localhost:8080/ ,訪問Jenkins主頁(yè)。
點(diǎn)擊“系統(tǒng)管理”-》“系統(tǒng)設(shè)置”
看到“Extended E-mail Notification”主題配置單元,就證明配置成功。
郵件的內(nèi)容如下:
項(xiàng)目名稱:$PROJECT_NAME
全局屬性詳解
1. Override Global Settings:如果不選,該插件將使用默認(rèn)的E-mail Notification通知選項(xiàng)。反之,您可以通過指定不同于( 默認(rèn)選項(xiàng))的設(shè)置來(lái)進(jìn)行覆蓋。
2. Default Content Type:指定構(gòu)建后發(fā)送郵件內(nèi)容的類型,有Text和HTML兩種.
3. Use List-ID Email Header:為所有的郵件設(shè)置一個(gè)List-ID的郵件信頭,這樣你就可以在郵件客戶端使用過濾。它也能阻止郵件發(fā)件人大部分的自動(dòng)回復(fù)(諸如離開辦公室、休假等等)。你可以使用你習(xí)慣的任何名稱或者ID號(hào),但是他們必須符合如下其中一種格式(真實(shí)的ID必須要包含在<和>標(biāo)記里):
Build Notifications
“Build Notifications”
關(guān)于更詳細(xì)的List-ID說明請(qǐng)參閱RFC-2919.
4. Add 'Precedence: bulk' Email Header:設(shè)置優(yōu)先級(jí),更詳細(xì)說明請(qǐng)參閱RFC-3834.
5. Default Recipients:自定義默認(rèn)電子郵件收件人列表。如果沒有被項(xiàng)目配置覆蓋,該插件會(huì)使用這個(gè)列表。您可以在項(xiàng)目配置使用$ DEFAULT_RECIPIENTS參數(shù)包括此默認(rèn)列表,以及添加新的地址在項(xiàng)目級(jí)別。添加抄送:cc:電子郵件地址例如,CC:someone@somewhere.com
6. Reply To List:回復(fù)列表, 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:如果這個(gè)字段不為空,所有的電子郵件將被單獨(dú)發(fā)送到該地址(或地址列表)。
8. Excluded Committers:防止郵件被郵件系統(tǒng)認(rèn)為是垃圾郵件,郵件列表應(yīng)該沒有擴(kuò)展的賬戶名(如:@domain.com),并且使用逗號(hào)分隔
9. Default Subject:自定義郵件通知的默認(rèn)主題名稱。該選項(xiàng)能在郵件的主題字段中替換一些參數(shù),這樣你就可以在構(gòu)建中包含指定的輸出信息。
10. Maximum Attachment Size:郵件最大附件大小。
11. Default Content:自定義郵件通知的默認(rèn)內(nèi)容主體。該選項(xiàng)能在郵件的內(nèi)容中替換一些參數(shù),這樣你就可以在構(gòu)建中包含指定的輸出信息。
12. Default Pre-send Script:默認(rèn)發(fā)送前執(zhí)行的腳本(注:grooy腳本,這是我在某篇文章上看到的,不一定準(zhǔn)確)。
13. Enable Debug Mode:?jiǎn)⒂貌寮恼{(diào)試模式。這將增加額外的日志輸出,構(gòu)建日志以及Jenkins的日志。在調(diào)試時(shí)是有用的,但不能用于生產(chǎn)。
14. Enable Security:?jiǎn)⒂脮r(shí),會(huì)禁用發(fā)送腳本的能力,直接進(jìn)入Jenkins實(shí)例。如果用戶試圖訪問Jenkins管理對(duì)象實(shí)例,將拋出一個(gè)安全異常。
15. Content Token Reference:郵件中可以使用的變量,所有的變量都是可選的。
郵件:
詳細(xì)配置可以參考 https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin4
點(diǎn)擊“系統(tǒng)管理”-》“管理插件”》“可選插件” 在搜索框輸入“Role-”點(diǎn)“直接下載”
點(diǎn)擊“系統(tǒng)管理”-》“Configure Global Security”
注意: 如果給anonymous新增admin權(quán)限,系統(tǒng)不用登陸也具有admin權(quán)限,所以其他的角色權(quán)限都是失效狀態(tài)。
點(diǎn)擊“系統(tǒng)管理”-》“管理插件”》“可選插件”搜索“Deploy to container Plugin”,“直接下載”
<tomcat-users> <role rolename="manager-status"/> <role rolename="manager-jmx"/> <role rolename="manager"/> <role rolename="tomcat"/> <role rolename="manager-script"/> <role rolename="admin"/> <role rolename="manager-gui"/> <role rolename="role1"/> <user username="mapengbo" password="mapengbo" roles="manager-gui,manager-script,manager-jmx,manager-status,tomcat,manager,admin"/></tomcat-users>
在已運(yùn)行的Jenkins主頁(yè)中,點(diǎn)擊左側(cè)的新建Job進(jìn)入如下界面:
選擇項(xiàng)目構(gòu)建工具,本例中使用ant,ant已經(jīng)在全局配置中配置。
配置構(gòu)建完成自動(dòng)部署,部署需要安裝deploy插件,安裝方法同郵件插件安裝。如果是集群部署則需要點(diǎn)擊“Add Container”新增需要部署的容器。
點(diǎn)擊“Console Output”查看構(gòu)建日志
創(chuàng)建數(shù)據(jù)庫(kù),默認(rèn)數(shù)據(jù)庫(kù)H2,這里我們修改為mysqlCREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; 創(chuàng)建用戶CREATE USER 'sonar' IDENTIFIED BY 'sonar'; 給用戶授權(quán)GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar'; FLUSH PRIVILEGES;
修改sonar.properties文件 <img src="/uploads/default/original/1X/fca07e48ba970f088f9e062560d845ece83441e3.png" width="558" height="200">添加如下內(nèi)容,sonar默認(rèn)自帶mysql驅(qū)動(dòng)。sonar.jdbc.username=sonarsonar.jdbc.password=sonarsonar.jdbc.url=jdbc:mysql://10.10.5.64:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true sonar.jdbc.driverClassName=com.mysql.jdbc.Driver
運(yùn)行“StartSonar.bat”
sonar.jdbc.username=sonarsonar.jdbc.password=sonarsonar.jdbc.url=jdbc:mysql://10.10.5.64:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true sonar.jdbc.driverClassName=com.mysql.jdbc.Driver
配置環(huán)境變量,將D:\sonar-runner-2.4\bin 添加到Path
在項(xiàng)目的根目錄下添加文件sonar-project.properties
sonar.projectKey=HotelMonitorsonar.projectName=HotelMonitorsonar.projectVersion=1.2sonar.sources=srcsonar.sourceEncoding=UTF-8sonar.language=java
在“開始”》“運(yùn)行”中輸入cmd切換的項(xiàng)目更目錄 輸入“sonar-runner”
登陸http://localhost:9000/ 查看代碼掃描結(jié)果
點(diǎn)擊點(diǎn)擊“系統(tǒng)管理”》“系統(tǒng)設(shè)置”
配置sonar-runner有兩種方式
第一種jenkins自動(dòng)安裝sonar-runner
將項(xiàng)目根目錄下的sonar-runner.properties提交svn,
執(zhí)行“立即構(gòu)建”
看到j(luò)enkins的控制臺(tái)輸出如下日志,校驗(yàn)成功
若果本地安裝了sonar-runner,可以運(yùn)行本地bat腳本的方式運(yùn)行sonar-runner,配置如下,前提是必須將sonar-runner加入的環(huán)境變量, 選擇“增加構(gòu)建步驟”
在maven官網(wǎng)下載maven
http://maven.apache.org/download.cgi
下載apache-maven-3.1.1-bin.zip并解壓
打開cmd窗口數(shù)據(jù) mvn –v 查看maven版本,打印如下表示安裝成功。
下載nexus http://www.sonatype.org/nexus/go/,我下載的是linux版本。
nexus-latest-bundle.tar.gz
將安裝包復(fù)制到需要安裝的機(jī)器,我安裝在/opt/soft/nexus
tar –zxvf nexus-latest-bundle.tar.gz
解壓后會(huì)出現(xiàn)兩個(gè)目錄
/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 #重啟服務(wù) 查看端口是否已經(jīng)開放 /etc/init.d/iptables status
Chmod 777 –R sonatype-work
修改maven安裝目錄conf下的settings.xml文件添加如下代碼
1.在profiles節(jié)點(diǎn)下添加 <profile> <repositories> <repository> <id>nexus</id> <name>nexus</name> <url>http://10.10.152.174:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile>在settings節(jié)點(diǎn)下添加<activeProfiles> <activeProfile>central</activeProfile> </activeProfiles> 在services節(jié)點(diǎn)下添加 <server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server>在項(xiàng)目的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>然后執(zhí)行clean deploy
右鍵“3rd party”
在索引中查看上傳的jar包
help:system可以打印所有可用的環(huán)境變量和Java系統(tǒng)屬性。
help:effective-pom用于查看當(dāng)前生效的POM內(nèi)容,指合并了所有父POM(包括Super POM)后的XML,所以可用于檢測(cè)POM中某個(gè)配置是否生效
help:effective-settings可用于查看當(dāng)前生效的settings.xml文件內(nèi)容,所以可用于判斷某個(gè)settings配置是否生效
mvn help:describe 你是否因?yàn)橛洸磺迥硞€(gè)插件有哪些goal而痛苦過,你是否因?yàn)橄氩黄鹉硞€(gè)goal有哪些參數(shù)而苦惱,那就試試這個(gè)命令吧,它會(huì)告訴你一切的. 參數(shù): 1. -Dplugin=pluginName 2. -Dgoal(或-Dmojo)=goalName:與-Dplugin一起使用,它會(huì)列出某個(gè)插件的goal信息,如果嫌不夠詳細(xì),同樣可以加-Ddetail.(注:一個(gè)插件goal也被認(rèn)為是一個(gè) “Mojo”) 下面大家就運(yùn)行mvn help:describe -Dplugin=help -Dmojo=describe感受一下吧!
mvn archetype:generate 你是怎么創(chuàng)建你的maven項(xiàng)目的?是不是像這樣:mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.ryanote -Dartifact=common,如果你還再用的話,那你就out了,現(xiàn)代人都用mvn archetype:generate了,它將創(chuàng)建項(xiàng)目這件枯燥的事更加人性化,你再也不需要記那么多的archetypeArtifactId,你只需輸入archetype:generate,剩下的就是做”選擇題”了.
mvn tomcat:run 用了maven后,你再也不需要用eclipse里的tomcat來(lái)運(yùn)行web項(xiàng)目(實(shí)際工作中經(jīng)常會(huì)發(fā)現(xiàn)用它會(huì)出現(xiàn)不同步更新的情況),只需在對(duì)應(yīng)目錄(如/ryanote)里運(yùn)行 mvn tomat:run命令,然后就可在瀏覽器里運(yùn)行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 當(dāng)然你也可以在命令里加參數(shù)來(lái)實(shí)現(xiàn)特定的功能,下面幾個(gè)比較常用: 1. 跳過測(cè)試:-Dmaven.test.skip(=true) 2. 指定端口:-Dmaven.tomcat.port=9090 3. 忽略測(cè)試失敗:-Dmaven.test.failure.ignore=true 當(dāng)然,如果你的其它關(guān)聯(lián)項(xiàng)目有過更新的話,一定要在項(xiàng)目根目錄下運(yùn)行mvn clean install來(lái)執(zhí)行更新,再運(yùn)行mvn tomcat:run使改動(dòng)生效.
mvnDebug tomcat:run 這條命令主要用來(lái)遠(yuǎn)程測(cè)試,它會(huì)監(jiān)聽遠(yuǎn)程測(cè)試用的8000端口,在eclipse里打開遠(yuǎn)程測(cè)試后,它就會(huì)跑起來(lái)了,設(shè)斷點(diǎn),調(diào)試,一切都是這么簡(jiǎn)單.上面提到的那幾個(gè)參數(shù)在這里同樣適用.
mvn dependency:sources 故名思義,有了它,你就不用到處找源碼了,運(yùn)行一下,你項(xiàng)目里所依賴的jar包的源碼就都有了
默認(rèn)jenkins已經(jīng)安裝了maven插件
聯(lián)系客服