Jenkins 自動(dòng)化部署

內(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ā)布
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沼琉,隨后出現(xiàn)的幾起案子北苟,更是在濱河造成了極大的恐慌,老刑警劉巖打瘪,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件友鼻,死亡現(xiàn)場(chǎng)離奇詭異妈候,居然都是意外死亡崔泵,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蹂析,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)葛碧,“玉大人借杰,你說(shuō)我怎么就攤上這事〗茫” “怎么了蔗衡?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵纤虽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我绞惦,道長(zhǎng)逼纸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任济蝉,我火速辦了婚禮杰刽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘王滤。我一直安慰自己贺嫂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布雁乡。 她就那樣靜靜地躺著第喳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪踱稍。 梳的紋絲不亂的頭發(fā)上曲饱,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音珠月,去河邊找鬼扩淀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛啤挎,可吹牛的內(nèi)容都是我干的驻谆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侵浸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了氛谜?” 一聲冷哼從身側(cè)響起掏觉,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎值漫,沒(méi)想到半個(gè)月后澳腹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杨何,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年酱塔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片危虱。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡羊娃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出埃跷,到底是詐尸還是另有隱情蕊玷,我是刑警寧澤邮利,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站垃帅,受9級(jí)特大地震影響延届,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贸诚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一方庭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酱固,春花似錦械念、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至扇苞,卻和暖如春欺殿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鳖敷。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工脖苏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人定踱。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓棍潘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親崖媚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亦歉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容