內(nèi)容提要
Jenkins + Git + Maven + tomcat集成環(huán)境部署,實(shí)現(xiàn)自動構(gòu)建、部署web應(yīng)用
環(huán)境依賴
OS:Centos 6.5
JDK:1.7.x
Maven:3.1.x
Git: 1.7.1,自建GitLab平臺
tomcat:7.x
Host:
master:194
slave: 198
(靜態(tài)IP統(tǒng)一定義為內(nèi)網(wǎng)24位子網(wǎng)掩碼,配置雙機(jī)互信,首次驗(yàn)證,需人為操作)
步驟說明
上述環(huán)境依賴宿主機(jī)上均需安裝
· JDK安裝,安裝后之后,請注意配置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)平臺,不要忘機(jī)在宿主機(jī)上添加hosts解析
Jenkins 配置
· Jenkins jar包下載
· 將jenkins.war通過tomcat部署
使用tomcat掛在啟動jenkins服務(wù)
這樣我們可以非常簡單的修改一些配置參數(shù)和維護(hù)
啟動jenkins服務(wù)的方式還可以通過jar方式啟動
· 修改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的頁面上登錄和授權(quán)操作
拓展:
關(guān)于jenkins的用戶授權(quán),官方提供了很多方式,比如LDAP、基于數(shù)據(jù)庫等等。本實(shí)例基于tomcat user的方式,簡單易用。
<tomcat-users>
<role rolename="admin"/>
<user username="admin" password="admin" roles="admin"/>
<user username="developer" password="developer" roles="manager"/>
</tomcat-users>
admin可以對系統(tǒng)各項(xiàng)配置進(jìn)行修改,manager可以管理項(xiàng)目、部署等
· 將jenkins.war放置在webapps目錄下
我希望jenkins作為ROOT項(xiàng)目加載
所以刪除原有的ROOT項(xiàng)目,并將jenkins.war重命名位ROOT.war
這樣在通過http訪問jenkins時(shí),不需要加ContextPath了
· 啟動jenkins tomcat,并通過web訪問。
./startup.sh
訪問http://*.*.*.194:$PORT,然后使用admin用戶登錄
· Master 配置
1、插件管理
在“可選插件”中,需要幾個常用的插件
主要涉及到:
SSH
Git
GitLab
Maven
Deploy插件(我們可以在maven build之后,立即將war發(fā)布到web容器中,而不需要手動操作或者寫shell腳本來copy文件)
管理員可按需安裝,安裝完成之后,重啟Jenkins
2、系統(tǒng)配置
其中重要的2個選項(xiàng):JDK,Maven
我們需要告知master它們安裝在何處
3、Build與發(fā)布
Deploy插件是通過外部(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>
增加一個“deployer”用戶,我們可以通過tomcat manager機(jī)制來部署war
master需要ssh訪問slave機(jī)器(部署、啟動,發(fā)送文件等)
所以在開始之前,需要在“jenkins”-->“Credentials”-->“Add Credentials”添加一個SSH驗(yàn)證規(guī)則
同時(shí)創(chuàng)建一個Global范圍的SSH無密碼登陸
此外,我們還需要在GitLab中目標(biāo)項(xiàng)目中增加“deploy key”
在創(chuàng)建item時(shí),還需要指定,這個item的job運(yùn)行結(jié)果最終保存在哪個“節(jié)點(diǎn)”上,即最終發(fā)布的位置
指定Git庫的地址,并配置master與GitLab通訊的SSH驗(yàn)證機(jī)制
當(dāng)代碼從Git下載之后,啟動Maven build階段
在Maven build時(shí),我們指定“Goals”,這個很重要,否則就沒有意義了
值得注意的是:
在發(fā)布之前,需要先刪除web應(yīng)用的tomcat中原有的ROOT.war,才能觸發(fā)tomcat undeploy操作。
這或許是“Deploy plugin”的bug,如果ROOT.war已經(jīng)存在,則無法再次deploy/redeploy
· Slave 配置
值得注意的一點(diǎn)是:
jenkins的slave不需要像master一樣部署在tomcat上。
master將會通過ssh將slave.jar文件到slave節(jié)點(diǎn)上,并啟動slave。
通過導(dǎo)航:“系統(tǒng)管理”-->“節(jié)點(diǎn)管理”-->“新建節(jié)點(diǎn)”,來增加slave。
此后需要部署在slave上的web應(yīng)用,只需要在創(chuàng)建item時(shí)指定“Restrict where project can be run”為slave即可。
Q&A
Q:為什么兩臺機(jī)器所需要的環(huán)境依賴需要完全一致?
A:因?yàn)閟lave接收master的job調(diào)度后,將會使用Git從GitLab上同步代碼并使用Maven進(jìn)行build,這個過程都是在salve的本地進(jìn)行。
Q:如果部署的時(shí)候報(bào)錯了,那我有哪些思路可以進(jìn)行排查?
A:1)tomcat是否已經(jīng)啟動。
2)tomcat-users.xml是否配置正確。
3)tomcat的版本和“Deploy plugin”中container指定的是否一致。
4)tomcat下是否已經(jīng)有ROOT項(xiàng)目,如果有,請刪除,然后重啟tomcat,此后再使用jenkins發(fā)布