Jenkins+Maven+Git搭建持續(xù)集成和自動化部署的配置手記

原文地址?http://passover.blog.51cto.com/2431658/1548232


前言

持續(xù)集成這個概念已經(jīng)成為軟件開發(fā)的主流敬辣,可以更頻繁的進行測試雪标,盡早發(fā)現(xiàn)問題并提示。自動化部署就更不用說了溉跃,可以加快部署速度汰聋,并可以有效減少人為操作的失誤。之前一直沒有把這個做起來喊积,最近的新項目正好有機會,費了一番功夫總算搞好了玄妈,特此記錄乾吻。

1. 開發(fā)環(huán)境

我這邊建立的標準開發(fā)環(huán)境如下:

1. Maven做項目管理髓梅;

2.?Git做代碼管理;

3.?SpringMVC+Spring+Mybatis搭建的程序框架绎签;

4.?Mysql作為數(shù)據(jù)存儲枯饿,Druid做連接池;

5.?unitils作為測試框架诡必;

6. Hibernate Validator作為數(shù)據(jù)驗證奢方;

7. log4j作為日志輸出。

注:其實這套東西非常像Grails爸舒,但不敢用太激進的技術(shù)和框架蟋字,擔心招人的問題-_-!

2. Jenkins的部署

Jenkins原名是Hudson,這個淵源這里就不追溯了扭勉,網(wǎng)上多得是鹊奖,但是千萬別下錯了,官網(wǎng)地址是http://jenkins-ci.org/涂炎。建議直接下載最新版本忠聚。

這個軟件的安裝是我見過最簡單的了,直接取war包放到tomcat下唱捣,啟動tomcat即可两蟀。相應(yīng)的工程配置會在~/.jenkins目錄中。(當然你根據(jù)官網(wǎng)給的那種安裝方法也行震缭,只是在debian的那個弄法還要去下載openjdk等等赂毯,多下了很多東西,相關(guān)配置也按linux目錄標準分開的蛀序,還要去找欢瞪。)

另外提醒一下,建議把Jenkins安裝在Linux上徐裸,這樣就不會出現(xiàn)ssh等命令找不到的問題遣鼓,否則還要想辦法去處理。

3. Jenkins的插件

安裝好后直接訪問“http://yourhost:8080/jenkins”即可進入主界面重贺,點擊“系統(tǒng)管理”->“管理插件”骑祟,首次進入都是空白的,要等1分鐘左右才能看到內(nèi)容气笙,在后臺估計是在做更新或者下載次企,然后重新再進此界面就能看到內(nèi)容了。

3.1 Git插件

在“可選插件”中找到“GIT plugin”安裝潜圃,最下面有個安裝完重啟的勾選項缸棵,選中即可。這里最搞笑的是檢測網(wǎng)絡(luò)是否連通的辦法是去嘗試打開google谭期,豈不知天朝是打不開的堵第,還好不影響下載吧凉。。踏志。

3.2 Email插件

這個事情非常蛋疼阀捅,之前測試怎么都發(fā)布出來郵件,最后升級了一下默認插件就行了针余,狂汗饲鄙。在“可更新”中找到“Mailer Plugin”選中并更新即可。另外如果想有更豐富的郵件內(nèi)容圆雁,就去“可選插件”中安裝“Email Extension Plugin”忍级,具體郵件內(nèi)容配置網(wǎng)上大把可以搜。

3.3 其他插件

默認就裝了很多常用插件摸柄,比如Maven颤练、Junit等等,如果使用感覺有問題可以嘗試升級一下版本驱负,但是沒有升級說明嗦玖,也不知道升級了什么東西。

4. 系統(tǒng)設(shè)置

主界面點擊“系統(tǒng)管理”->“系統(tǒng)設(shè)置”即可進入跃脊。重點配置以下內(nèi)容:

1. Java宇挫、Git、Maven的目錄位置酪术,確逼鞅瘢可以正確找到命令;

2. Jenkins URL绘雁,自動生成的橡疼,檢查一下即可;

3.?郵件的設(shè)置。這里注意一下庐舟,上面有一個“系統(tǒng)管理員郵件地址”需要填寫欣除,另外“Extended E-mail Notification”中填寫配置,原來的“郵件配置”就不用再理會了挪略。

5. 項目設(shè)置

在主界面直接“新建”历帚,就會有一個新的項目。重點配置以下內(nèi)容:

1. 源碼管理:選擇Git杠娱,填寫“Repository URL”挽牢,并加上相應(yīng)的“Credentials”,其中認證信息用私鑰的話干脆直接把私鑰內(nèi)容填上去就行了摊求,省的不知道目錄查找規(guī)則還不知道出的啥問題禽拔。

2. 構(gòu)建觸發(fā)器:這個地方要把“Build periodically”和“Poll SCM”都選上,時間格式都填寫成一樣的即可,比如“H/15 ?* * * *”奏赘,下面會有個具體執(zhí)行時間的提示寥闪,Build動作會自動比Poll延遲3分40秒,這個設(shè)定還是很合理的磨淌。

3. 構(gòu)建:增加兩個構(gòu)建步驟,分別是“Execute shell”和“Invoke top-level Maven target”凿渊,注意先后順序梁只,可以拖拽擺放的。腳本執(zhí)行根據(jù)自己需要埃脏,比如我需要去修改數(shù)據(jù)庫連接配置搪锣,官方建議是自己在工程里面寫好腳本,這里直接調(diào)用彩掐,而不是在這寫一個完整的腳本构舟。Maven構(gòu)建就加上“clean test”即可,就是運行“mvn clean test”的命令堵幽。

4. Publish Junit test result report:在測試報告(XML)上加上“**/target/surefire-reports/*.xml”即可狗超,這樣就會每次測試完自動找到測試報告,在Jenkins上即可在每個構(gòu)建結(jié)構(gòu)里面查看到朴下。

5. 郵件通知:在構(gòu)建后增加“Editable Email Notification”努咐,填寫郵件的接受者、內(nèi)容格式可以直接用全局變量殴胧,重點是配置一下發(fā)送觸發(fā)條件渗稍。

6. 安全性配置

經(jīng)過以上配置進行一次構(gòu)建就會發(fā)現(xiàn),Jenkins可以看到太多內(nèi)容了团滥,包括pull到的源碼竿屹,所以非常有必要增加權(quán)限控制。進入“系統(tǒng)管理”->“Configure Global Security”中進行如下步驟:

1. 啟用安全灸姊;

2.?Jenkins專有用戶數(shù)據(jù)庫拱燃,先允許用戶注冊;

3. 授權(quán)策略選擇“安全矩陣”厨钻,新加一個“admin”的用戶扼雏,把所有權(quán)限都開給admin用戶;

4. 在主界面的用戶中找到admin夯膀,進行配置诗充,設(shè)置登陸密碼;

5. 先重新登陸測試一下是否admin正常诱建,沒有問題就關(guān)閉允許用戶注冊蝴蜓,把匿名用戶的所有權(quán)限都去掉。

7. 自動化部署

這里我沒有讓Jenkins每次測試都去部署,一方面是考慮到單元測試基本已經(jīng)滿足需要了茎匠,另一方面因為測試太頻繁了格仲,一直部署也搞得Stage測試環(huán)境要經(jīng)常重啟,反而影響正常的人工測試诵冒。所以自己寫了個腳本凯肋,在必要的時候去運行一下去自動完成整個部署工作。

#!/bin/sh

#?update?code

git?pull

#?package

mvn?clean

mvn?package?-Dmaven.test.skip=true

#?deploy

WAR=`lstarget?|grepwar`

TOMCAT=/home/test/apache-tomcat-6.0.41

mvtarget/$WAR?$TOMCAT

cd$TOMCAT

#?invoke?another?deploy?script

sh?deploy-war.sh?$WAR?webapps

8. 一個非常蛋疼的問題

這個和以上問題都無關(guān)汽馋,只是極其不解的是這個錯誤在Windows下不出現(xiàn)侮东,在Linux下打成War也不會出現(xiàn),只有在Linux下直接執(zhí)行Maven test就會出錯豹芯。其實問題的根源就是配置書寫不夠規(guī)范悄雅,但是錯誤出現(xiàn)的不一致性實在讓人蛋疼。報錯如下:

org.apache.ibatis.binding.BindingException:?Invalid?bound?statement?(not?found):?xxx

這個就是Mybatis找不到綁定的類铁蹈,但是xml是正確打包的宽闲,怎么看都是沒大問題,并且windows也是對的握牧,最后發(fā)現(xiàn)是我在寫模糊路徑的時候容诬,classpath后面必須要加個*才是標準寫法,正確寫法如下:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末我碟,一起剝皮案震驚了整個濱河市放案,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矫俺,老刑警劉巖吱殉,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異厘托,居然都是意外死亡友雳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門铅匹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來押赊,“玉大人,你說我怎么就攤上這事包斑×鹘福” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵罗丰,是天一觀的道長神帅。 經(jīng)常有香客問我,道長萌抵,這世上最難降的妖魔是什么找御? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任元镀,我火速辦了婚禮,結(jié)果婚禮上霎桅,老公的妹妹穿的比我還像新娘栖疑。我一直安慰自己,他們只是感情好滔驶,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布遇革。 她就那樣靜靜地躺著,像睡著了一般瓜浸。 火紅的嫁衣襯著肌膚如雪澳淑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天插佛,我揣著相機與錄音,去河邊找鬼量窘。 笑死雇寇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蚌铜。 我是一名探鬼主播锨侯,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冬殃!你這毒婦竟也來了囚痴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤审葬,失蹤者是張志新(化名)和其女友劉穎深滚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涣觉,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡痴荐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了官册。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片生兆。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖膝宁,靈堂內(nèi)的尸體忽然破棺而出鸦难,到底是詐尸還是另有隱情,我是刑警寧澤员淫,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布合蔽,位于F島的核電站,受9級特大地震影響满粗,放射性物質(zhì)發(fā)生泄漏辈末。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挤聘。 院中可真熱鬧轰枝,春花似錦、人聲如沸组去。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽从隆。三九已至诚撵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間键闺,已是汗流浹背寿烟。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辛燥,地道東北人筛武。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像挎塌,于是被迫代替她去往敵國和親徘六。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

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