內(nèi)容提要
Jenkins + Git + Maven + tomcat集成環(huán)境部署,實(shí)現(xiàn)自動(dòng)構(gòu)建企孩、部署web應(yīng)用
環(huán)境依賴
OS:Centos 6.5
JDK:1.7.x
Maven:3.1.x
Git: 1.7.1坷备,自建GitLab平臺(tái)
tomcat:7.x
Host:
master:194
slave: 198
(靜態(tài)IP統(tǒng)一定義為內(nèi)網(wǎng)24位子網(wǎng)掩碼益楼,配置雙機(jī)互信,首次驗(yàn)證寻行,需人為操作)
步驟說(shuō)明
上述環(huán)境依賴宿主機(jī)上均需安裝
· JDK安裝霍掺,安裝后之后,請(qǐng)注意配置JAVA_HOME環(huán)境變量拌蜘。
·Maven安裝:從apache下載tar.gz壓縮包杆烁,在合適的目錄下解壓即可。此后配置全局環(huán)境變量简卧。
·tomcat安裝:不做詳細(xì)闡述
·Git:節(jié)省實(shí)驗(yàn)時(shí)間兔魂,直接執(zhí)行“yum install git”
若貴司GitLab是自建的內(nèi)網(wǎng)平臺(tái),不要忘機(jī)在宿主機(jī)上添加hosts解析
Jenkins 配置
· Jenkins jar包下載
· 將jenkins.war通過(guò)tomcat部署
使用tomcat掛在啟動(dòng)jenkins服務(wù)
這樣我們可以非常簡(jiǎn)單的修改一些配置參數(shù)和維護(hù)
啟動(dòng)jenkins服務(wù)的方式還可以通過(guò)jar方式啟動(dòng)
· 修改context.xml文件举娩,增加jenkins環(huán)境變量析校,由tomcat掛載构罗。
<Context>
<Environment name="JENKINS_HOME" value="/home/jenkins_home/" type="java.lang.String"/>
</Context>
· 修改tomcat-users.xml,配置jenkins的用戶智玻,此后用戶可以在jenkins的頁(yè)面上登錄和授權(quán)操作
拓展:
關(guān)于jenkins的用戶授權(quán)遂唧,官方提供了很多方式,比如LDAP吊奢、基于數(shù)據(jù)庫(kù)等等盖彭。本實(shí)例基于tomcat user的方式,簡(jiǎn)單易用页滚。
<tomcat-users>
<role rolename="admin"/>
<user username="admin" password="admin" roles="admin"/>
<user username="developer" password="developer" roles="manager"/>
</tomcat-users>
admin可以對(duì)系統(tǒng)各項(xiàng)配置進(jìn)行修改召边,manager可以管理項(xiàng)目、部署等
· 將jenkins.war放置在webapps目錄下
我希望jenkins作為ROOT項(xiàng)目加載
所以刪除原有的ROOT項(xiàng)目裹驰,并將jenkins.war重命名位ROOT.war
這樣在通過(guò)http訪問(wèn)jenkins時(shí)隧熙,不需要加ContextPath了
· 啟動(dòng)jenkins tomcat,并通過(guò)web訪問(wèn)幻林。
./startup.sh
訪問(wèn)http://*.*.*.194:$PORT贱鼻,然后使用admin用戶登錄
· Master 配置
1、插件管理
在“可選插件”中滋将,需要幾個(gè)常用的插件
主要涉及到:
SSH
Git
GitLab
Maven
Deploy插件(我們可以在maven build之后,立即將war發(fā)布到web容器中症昏,而不需要手動(dòng)操作或者寫shell腳本來(lái)copy文件)
管理員可按需安裝随闽,安裝完成之后,重啟Jenkins
2肝谭、系統(tǒng)配置
其中重要的2個(gè)選項(xiàng):JDK掘宪,Maven
我們需要告知master它們安裝在何處
3、Build與發(fā)布
Deploy插件是通過(guò)外部(http)方式“deploy/redeploy”
所以需要在tomcat上進(jìn)行用戶授權(quán)
編輯tomcat-users.xml攘烛,增加如下配置:
<tomcat-users>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="deployer" password="deployer" roles="standard,manager,admin,manager-script" />
</tomcat-users>
增加一個(gè)“deployer”用戶魏滚,我們可以通過(guò)tomcat manager機(jī)制來(lái)部署war
master需要ssh訪問(wèn)slave機(jī)器(部署、啟動(dòng)坟漱,發(fā)送文件等)
所以在開始之前鼠次,需要在“jenkins”-->“Credentials”-->“Add Credentials”添加一個(gè)SSH驗(yàn)證規(guī)則
同時(shí)創(chuàng)建一個(gè)Global范圍的SSH無(wú)密碼登陸
此外,我們還需要在GitLab中目標(biāo)項(xiàng)目中增加“deploy key”
在創(chuàng)建item時(shí)芋齿,還需要指定腥寇,這個(gè)item的job運(yùn)行結(jié)果最終保存在哪個(gè)“節(jié)點(diǎn)”上,即最終發(fā)布的位置
指定Git庫(kù)的地址觅捆,并配置master與GitLab通訊的SSH驗(yàn)證機(jī)制
當(dāng)代碼從Git下載之后赦役,啟動(dòng)Maven build階段
在Maven build時(shí),我們指定“Goals”栅炒,這個(gè)很重要掂摔,否則就沒(méi)有意義了
值得注意的是:
在發(fā)布之前术羔,需要先刪除web應(yīng)用的tomcat中原有的ROOT.war,才能觸發(fā)tomcat undeploy操作乙漓。
這或許是“Deploy plugin”的bug级历,如果ROOT.war已經(jīng)存在,則無(wú)法再次deploy/redeploy
· Slave 配置
值得注意的一點(diǎn)是:
jenkins的slave不需要像master一樣部署在tomcat上簇秒。
master將會(huì)通過(guò)ssh將slave.jar文件到slave節(jié)點(diǎn)上鱼喉,并啟動(dòng)slave。
通過(guò)導(dǎo)航:“系統(tǒng)管理”-->“節(jié)點(diǎn)管理”-->“新建節(jié)點(diǎn)”趋观,來(lái)增加slave扛禽。
此后需要部署在slave上的web應(yīng)用,只需要在創(chuàng)建item時(shí)指定“Restrict where project can be run”為slave即可皱坛。
Q&A
Q:為什么兩臺(tái)機(jī)器所需要的環(huán)境依賴需要完全一致编曼?
A:因?yàn)閟lave接收master的job調(diào)度后,將會(huì)使用Git從GitLab上同步代碼并使用Maven進(jìn)行build剩辟,這個(gè)過(guò)程都是在salve的本地進(jìn)行掐场。
Q:如果部署的時(shí)候報(bào)錯(cuò)了,那我有哪些思路可以進(jìn)行排查贩猎?
A:1)tomcat是否已經(jīng)啟動(dòng)熊户。
2)tomcat-users.xml是否配置正確。
3)tomcat的版本和“Deploy plugin”中container指定的是否一致吭服。
4)tomcat下是否已經(jīng)有ROOT項(xiàng)目嚷堡,如果有,請(qǐng)刪除艇棕,然后重啟tomcat蝌戒,此后再使用jenkins發(fā)布