JavaWEB學(xué)習(xí)記錄--Jenkins自動(dòng)部署Maven項(xiàng)目

JavaWEB學(xué)習(xí)記錄--Jenkins自動(dòng)部署Maven項(xiàng)目

標(biāo)簽(空格分隔): javaWEB


最近在研究jenkins的自動(dòng)部署方案,有一些心得,記錄下來(lái)以幫助其他人.如果對(duì)你有幫助記得點(diǎn)下贊哈.


1.部署方式的選擇

1.1 tomcat上傳

該方式網(wǎng)上很多教程都是這個(gè),使用這個(gè)方式的話(huà)需要tomcat中有初始時(shí)Manage這個(gè)項(xiàng)目,本質(zhì)上是通過(guò)http://ip:port/manager/html這個(gè)地址的上傳接口進(jìn)行上傳,進(jìn)行熱部署.具體如下圖:

這里寫(xiě)圖片描述
這里寫(xiě)圖片描述

這樣做有很多弊端:(個(gè)人觀點(diǎn),可能因?yàn)槟壳耙?jiàn)識(shí)短而不夠充分認(rèn)識(shí))

  1. 這樣做沒(méi)法對(duì)之前的項(xiàng)目備份
  2. 這種部署方式會(huì)導(dǎo)致tomcat內(nèi)原項(xiàng)目的很多資源釋放不掉,部署多次后會(huì)報(bào)OutOfMemoryError這個(gè)錯(cuò)誤.
  3. 需要tomcat內(nèi)有manage項(xiàng)目,安全性不夠,容易被利用
    基于這些考慮,拋棄了這種方案.

1.2使用腳本部署

該方案實(shí)際上使用jenkins把打包后的war包上傳到服務(wù)器,上傳成功后執(zhí)行服務(wù)器的腳本,該腳本會(huì)備份,并強(qiáng)制kill tomcat進(jìn)程,部署war包后再啟動(dòng)tomcat,具體流程圖如下:

這里寫(xiě)圖片描述

最終采用了這種方案進(jìn)行部署.


2.具體部署

2.1安裝jenkins,配置

安裝這里就不詳細(xì)講述了,說(shuō)下需要的插件
Maven Integration plugin:是的jenkins支持maven任務(wù)構(gòu)建
Publish Over SSH:使得jenkins支持ssh連接上傳,并執(zhí)行對(duì)應(yīng)命令

2.2配置Publish Over SSH插件

設(shè)置地址:系統(tǒng)管理/系統(tǒng)設(shè)置/Publish over SSH

公共配置:
Passphrase:密碼(如果你設(shè)置了key,為key的密碼,否則為username的密碼)
Path to key:key文件(私鑰)的路徑
Key:將私鑰復(fù)制到這個(gè)框中
Disable exec:禁止運(yùn)行命令,這個(gè)不要勾選,否則沒(méi)法執(zhí)行命令
私有配置:
SSH Server Name:標(biāo)識(shí)的名字(隨便你取什么)
Hostname:需要連接ssh的主機(jī)名或ip地址(建議ip)
Username:用戶(hù)名
Remote Directory:遠(yuǎn)程目錄
Use password authentication, or use a different key:可以替換公共配置(選中展開(kāi)的就是公共配置的東西,這樣做擴(kuò)展性很好)
私有配置的高級(jí):
Port:端口(默認(rèn)22)
Timeout (ms):超時(shí)時(shí)間(毫秒)默認(rèn)即可
Disable exec:禁止運(yùn)行命令
Test Configuration:測(cè)試連接

配置完成后測(cè)試下,提示success的話(huà)就沒(méi)問(wèn)題.

這里寫(xiě)圖片描述

2.3腳本配置

腳本的主要功能為備份,kill tomcat,部署war包,start tomcat,難點(diǎn)就是怎么kill tomcat,下面結(jié)合網(wǎng)上的腳本修改的

使用ps -ef | grep $TOMCAT_HOME | grep -v 'grep\|tail\|more\|bash\|less'| awk '{print $2}'這個(gè)命令來(lái)查找指定tomcat的進(jìn)程id的,解決了一臺(tái)機(jī)器多個(gè)tomcat互相間有關(guān)聯(lián)的問(wèn)題.

#!/usr/bin/bash
#默認(rèn)變量值
TOMCAT_HOME="/root/apache-tomcat-8.5.6"
TOMCAT_PORT=8080
PROJECT="$1"
#參數(shù)檢驗(yàn)./deploy.sh <projectname> [tomcat port] [tomcat home dir]
if [ $# -lt 1 ]; then
  echo "you must use like this : ./deploy.sh <projectname> [tomcat port] [tomcat home dir]"  
  exit
fi
if [ ! -n "$2" ]; then
   TOMCAT_PORT=$2
fi
if [ ! -n "$3" ]; then
   TOMCAT_HOME="$3"
fi

#根據(jù)端口查找tomcatpid,可能有多個(gè),循環(huán)中判斷
tomcat_pid=`netstat -anp | grep $TOMCAT_PORT | awk '{printf $7}' | cut -d "/" -f 1`
echo "current :" $tomcat_pid
while [ -n "$tomcat_pid" ]
do
 sleep 5
 #進(jìn)一步篩選
 tomcat_pid=`ps -ef | grep $tomcat_pid |grep $TOMCAT_HOME | grep -v 'grep\|tail\|more\|bash\|less'| awk '{print $2}'`
 echo "scan tomcat pid :" $tomcat_pid
 if [ -n "$tomcat_pid" ]; then
   echo "kill tomcat :" $tomcat_pid
   kill -9 $tomcat_pid
 fi
done

#備份路徑
BAK_DIR=$HOME/war/bak/$PROJECT/`date +%Y%m%d`
mkdir -p "$BAK_DIR"
cp "$TOMCAT_HOME"/webapps/$PROJECT.war "$BAK_DIR"/"$PROJECT"_`date +%H%M%S`.war

#publish project
echo "scan no tomcat pid,$PROJECT publishing"
rm -rf "$TOMCAT_HOME"/webapps/$PROJECT
rm -rf "$TOMCAT_HOME"/webapps/$PROJECT.war
cp $HOME/war/$PROJECT.war "$TOMCAT_HOME"/webapps/$PROJECT.war

#remove tmp
rm -rf $HOME/war/$PROJECT.war
#start tomcat
"$TOMCAT_HOME"/bin/startup.sh
echo "tomcat is starting,please try to access $PROJECT conslone url"

注意:
腳本如果從win下直接拷貝到linux會(huì)出現(xiàn)格式錯(cuò)誤,使用vi直接建立個(gè)腳本,復(fù)制進(jìn)去即可.
腳本放置在SSH配置的Remote directory下,不然找不到,并且需要給其一定的執(zhí)行權(quán)限,不然也是無(wú)法執(zhí)行.

使用方法:./deploy.sh <projectname> [tomcat port] [tomcat home dir]


2.4任務(wù)配置

在構(gòu)建完成后選擇 Send build artifacts over SSH.

Source files:部署的源文件,相對(duì)于jenkins的工作目錄
Remove prefix:war包對(duì)應(yīng)的前面的路徑,可以查看右邊的小問(wèn)號(hào).
Remote directory:配置目錄,這個(gè)目錄會(huì)和全局目錄疊加,比如我全局目錄為/home/web_as + 當(dāng)前目錄/war,為上傳目錄
Exec command:要執(zhí)行的命令,也就是執(zhí)行自定義腳本,這里需要以~/開(kāi)始,不然沒(méi)法執(zhí)行,也不知道是不是只有我遇到了這個(gè)問(wèn)題.

這里寫(xiě)圖片描述

2.5 構(gòu)建測(cè)試

點(diǎn)擊構(gòu)建,在構(gòu)建成功后jenkins控制臺(tái)會(huì)打出下面的日志:

.......
SSH: Connecting from host [DESHOP01.chmpay.com]
SSH: Connecting with configuration [30] ...
SSH: EXEC: STDOUT/STDERR from command [~/deploy.sh api 8090 /home/web_as/api-tomcat] ...
current : 18748
scan tomcat pid : 18748
kill tomcat : 18748
scan tomcat pid :
scan no tomcat pid,api publishing
tomcat is starting,please try to access api conslone url
SSH: EXEC: completed after 10,611 ms
SSH: Disconnecting configuration [30] ...
SSH: Transferred 1 file(s)

如果出現(xiàn)錯(cuò)誤可以通過(guò)日志來(lái)定位,解決.

構(gòu)建成功后查看tomcat日志,是關(guān)閉重啟的話(huà)則證明構(gòu)建有效.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宛畦,一起剝皮案震驚了整個(gè)濱河市瘸洛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌次和,老刑警劉巖反肋,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異踏施,居然都是意外死亡石蔗,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)畅形,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)抓督,“玉大人,你說(shuō)我怎么就攤上這事束亏。” “怎么了阵具?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵碍遍,是天一觀的道長(zhǎng)定铜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)怕敬,這世上最難降的妖魔是什么揣炕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮东跪,結(jié)果婚禮上畸陡,老公的妹妹穿的比我還像新娘。我一直安慰自己虽填,他們只是感情好丁恭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著斋日,像睡著了一般牲览。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恶守,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天第献,我揣著相機(jī)與錄音,去河邊找鬼兔港。 笑死庸毫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的衫樊。 我是一名探鬼主播飒赃,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼橡伞!你這毒婦竟也來(lái)了盒揉?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤兑徘,失蹤者是張志新(化名)和其女友劉穎刚盈,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體挂脑,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡藕漱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了崭闲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肋联。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刁俭,靈堂內(nèi)的尸體忽然破棺而出橄仍,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布侮繁,位于F島的核電站虑粥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宪哩。R本人自食惡果不足惜娩贷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锁孟。 院中可真熱鬧彬祖,春花似錦、人聲如沸品抽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桑包。三九已至南蓬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哑了,已是汗流浹背赘方。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弱左,地道東北人窄陡。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像拆火,于是被迫代替她去往敵國(guó)和親跳夭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子们镜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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