pandaAnthony:jenkins+git+maven持續(xù)集成(四)

這個系列有四篇文章捺典,自動部署分成了2篇:

  1. jenkins+git+maven持續(xù)集成(一):主要介紹Centos7下jenkins的安裝
  2. jenkins+git+maven持續(xù)集成(二):主要介紹下jenkins怎么集成git+maven進行自動構(gòu)建
  3. jenkins+git+maven持續(xù)集成(三):主要介紹下jenkins怎么集成進行自動部署(發(fā)布到maven私有庫)
  4. jenkins+git+maven持續(xù)集成(四):主要介紹下jenkins怎么集成進行自動部署(通過SSH部署到服務器)

上一篇介紹了手動和自動發(fā)布包到maven私有庫宏蛉,這篇主要介紹通過SSH進行自動部署想诅。

再回到前面的jenkinsDemo任務編輯頁面柠横,在構(gòu)建的下面能看到“構(gòu)建后操作”:


image.png

我們點開“增加構(gòu)建后操作步驟”:


image.png

可以看到目前是沒有部署到linux服務器相關(guān)選項的。

部署到linux服務器上并運行

自動構(gòu)建后還有一個用得更多的操作就是部署到對應的服務器上運行篇恒。在spring boot沒有廣泛運用之前媒咳,大多數(shù)java程序都是打成war部署到tomcat下運行;而spring boot一般則是通過內(nèi)嵌tomcat打成個獨立的jar運行使碾,如果有很多微服務的話可能會用到docker容器進行部署運行蜜徽,不過那樣又會涉及到docker容器編排,不僅需要了解docker票摇,還需要了解容器編排工具k8s之類的拘鞋。

這里我們用spring boot打成jar包的方式來進行部署。

1. 安裝SSH插件

Jenkins默認是沒有SSH插件的矢门,需要我們自己安裝掐禁。直接搜索SSH:


image.png

2. 通過SSH部署

找到“Publish Over SSH”進行安裝,完成后回到構(gòu)建后操作:


image.png

選擇“Send build artifacts over SSH”:


image.png

在這個界面我們可以看到SSH Publishers下是SSH Server颅和,下方有個“Add Server”傅事;這說明我們可以一次構(gòu)建部署到多個不同的SSH Server上。
然后SSH Server的構(gòu)成是2部分峡扩,一個是Name蹭越,另一個是Transfers;而Transfer又是多個Transfer Set構(gòu)成的教届。
Transfer Set上我們能看到“Source files”响鹃、“Remove prefix”、“Remote directory”和“Exec command”案训。從字面上就可以初步理解這些代表什么意思:
Source files:需要傳輸?shù)奈募?br> Remove prefix:去除前綴
Remote directory:需要傳輸文件到哪
Exec command:執(zhí)行命令

從上到下买置,我們需要SSH Server的Name,這是個下拉框强霎;很明顯我們目前沒有配置過忿项,點開后面的提示:


image.png

需要我們在Jenkins的全局配置中進行:


image.png

點擊進去,直接到頁面最下方:


image.png

點擊新增一個SSH Server城舞,直接點開每行后面的提示:


image.png

name:這里就是一個名字轩触,根據(jù)公司要求來命名(最基本的要求是按環(huán)境來分)
Hostname:需要連接的主機域名或ip地址
Username:連接的用戶名
Remote Directory:這里是基礎(chǔ)的路徑,前面Transfer Set中的是在基礎(chǔ)路徑下的

默認能看到的就是這些信息家夺,很明顯沒有驗證方式脱柱,我們點開高級:


image.png

可以看到有個認證方式的選擇框,最下方還有個測試配置的按鈕拉馋;選中復選框看有些什么:


image.png

發(fā)現(xiàn)一種是要輸入密碼的榨为,一種是免密的方式惨好;根據(jù)具體要求來定,我這里用密碼的方式随闺。


image.png

測試下是否成功:


image.png

看到了Success日川,說明配置的這個SSH Server是成功的,保存后會到任務的編輯頁面板壮。


image.png

可以看到SSH Server的Name直接是剛才配置的node2了逗鸣,一般會配置多個合住,根據(jù)自己需要部署的具體Server選擇绰精。

那么接下的Source files要怎么選擇呢,這是和構(gòu)建的具體結(jié)構(gòu)有關(guān)的透葛。以我選擇的這個spring cloud工程為例笨使,首先我需要做的是運行eureka工程下jar包,也就是啟動eureka的注冊中心僚害。
我們來看下這個jar的位置硫椰,回到任務的主頁點開工作空間:


image.png

很明顯我們要的jar包不是在根目錄,其實這和我們本地執(zhí)行maven構(gòu)建是一樣的萨蚕,eureka的jar包是在spring-cloud-eureka/target下:


image.png

image.png

所以Source files的地址在我們這個例子中就是:spring-cloud-eureka/target/*.jar


image.png

如果有多個的話就用逗號隔開靶草。我們這里要的是jar包,所以jar包前面的那部分就是前綴prefix了:


image.png

剛才我們配置了一個基礎(chǔ)的Remote Directory路徑/usr/local/src/temp岳遥,我打算再建個eureka的文件夾奕翔,將jar放到/usr/local/src/temp/eureka下,那么這里就只需要加個eureka了:


image.png

看到提示說明如果沒有在公共配置Remote Directory浩蓉,這里的就是直接路徑了派继。
接下就是我們需要執(zhí)行什么命令了,注意連接后相當于用遠程工具連接一樣是在系統(tǒng)根目錄的捻艳,這里我們先只考慮第一次安裝驾窟,先進入對應的文件,直接運行jar了:


image.png

這里其實基本相當于你手動操作時在服務器上可以進行的操作认轨,只是將命令放到jenkins中了绅络。
到這里,配置基本結(jié)束了嘁字;我們先保存昨稼,點擊立即構(gòu)建看是否能成功。


image.png

在控制臺我們能看到deploy到maven私有庫成功了拳锚,而且也運行到了我們配置的命令假栓;給出的提示是java命令沒找到。在解決這個問題先下文件是否如我們期望地傳到了node2上:


image.png

可以看到已經(jīng)成功了霍掺。(這里有個要注意的就是公共配置的Remote Directory路徑必須是存在的匾荆,我們這里配的是/usr/local/src/temp)

為什么java命令沒找呢拌蜘,在node2上是可以直接運行的;是不是jenkins讀取不到node2上配置的環(huán)境變量呢牙丽。這里我們嘗試2種方式简卧,一是寫全路徑:/usr/java/jdk1.8/bin/java -jar spring-cloud-eureka-1.0-SNAPSHOT.jar;
另一種是寫個shell腳本放在eureka下去運行:sh ./install.sh烤芦,腳本內(nèi)容就是java -jar spring-cloud-eureka-1.0-SNAPSHOT.jar举娩。

先看下第一種方式:


image.png

保存后運行:


image.png

在控制臺可以看到命令執(zhí)行了,這里是eureka集群构罗,控制臺中會有些錯誤信息铜涉;直接看最后的結(jié)果:


image.png

似乎Jenkins因為超時的原因強制關(guān)閉了連接;那么eureka啟動了沒有呢遂唧,我們檢查下:


image.png

正常啟動了芙代。通過這個我們驗證了2點,Jenkins沒辦法找到服務器node2上環(huán)境變量盖彭,只能全路徑啟動纹烹;超過2分鐘會關(guān)閉連接。當然這種方式肯定不是我們需要的召边,首先我們沒必要寫全路徑铺呵,其次我們最后能讓這個程序在后臺運行不要在控制臺數(shù)據(jù)這么多信息。

那我們來看第二種方式隧熙,先創(chuàng)建好install.sh片挂,并授權(quán):

chmod 777 install.sh

image.png

修改編輯頁面命令為sh ./install.sh:


image.png

再啟動之前我們先強制kill掉剛才啟動的java進程:


image.png

保存后運行:


image.png

發(fā)現(xiàn)還是不行,難道只能寫全路徑了嗎贱鼻?在網(wǎng)上找了個方案宴卖,在最前面加上:

source /etc/profile

image.png

這次和第一次一樣了,最后的結(jié)果也是一樣邻悬,說明直接在編輯界面用命令行和編輯界面運行shell效果是一樣的症昏。這里最關(guān)鍵的地方是要運行source /etc/profile,這樣才能拿到需要部署服務器的環(huán)境變量父丰。

這和我們期望的還是有一點差距肝谭,如果是自己跑demo基本上到這里就可以了;但是公司里運行的話這樣肯定不行蛾扇,這是不穩(wěn)定的構(gòu)建攘烛。接下來我們進行改造,還是用第二種方式镀首,在shell腳本中編寫坟漱;這樣的好處顯而易見,Jenkins的編輯界面這里只管調(diào)用shell腳本(shell腳本可以寫得很靈活更哄,接收各種參數(shù)芋齿,這里就不擴展了)腥寇。

我們要達到的效果就是讓java -jar這個命令在后臺運行,這就是linux的知識了觅捆;本人對于linux只懂皮毛赦役,百度了下個人覺得比較好的后臺運行方式:

nohup command > myout.file 2>&1 &

這是指定輸出文件:其中nohup將程序以忽略掛起信號的方式運行起來,末尾空格加&栅炒;如果不指定輸出文件掂摔,會掛起來要ctrl + c才能進入命令行。
還有一種方式赢赊,輸出到空(這里的/dev/null 是設備文件乙漓,不是普通文件,如果系統(tǒng)上沒有不要用普通創(chuàng)建文件的方式去執(zhí)行域携,會導致系統(tǒng)不能連接簇秒。鱼喉。秀鞭。):

nohup command > /dev/null 2>&1 &

經(jīng)過測試可以去掉nohup:


image.png

image.png

這樣就比較符合了,改造下shell腳本:

source /etc/profile
echo $JAVA_HOME
java -jar spring-cloud-eureka-1.0-SNAPSHOT.jar > myout.file 2>&1 &

kill掉java進程后再重新執(zhí)行構(gòu)建:


image.png

這樣就不會將日志輸出到控制臺阻塞住了扛禽,直接檢查下注冊中心頁面:


image.png

檢查下java進程:


image.png

啟動日志輸出文件:


image.png

SSH自動部署到服務器基本就完成了锋边,當然實際項目中要考慮更多的問題:
比如啟動過了又要部署啟動怎么處理,首先要檢查端口是否被占用编曼,如果占用了就kill掉再啟動豆巨;
還有就是怎么把shell腳本寫得更加靈活,支持多環(huán)境配置掐场,多端口啟動等往扔。
這些就不在這里擴展了,不過有了這些基本的知識可以避免不少坑熊户;只需要再根據(jù)業(yè)務進行擴展和優(yōu)化了萍膛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嚷堡,隨后出現(xiàn)的幾起案子蝗罗,更是在濱河造成了極大的恐慌,老刑警劉巖蝌戒,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件串塑,死亡現(xiàn)場離奇詭異,居然都是意外死亡北苟,警方通過查閱死者的電腦和手機桩匪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來友鼻,“玉大人傻昙,你說我怎么就攤上這事瑟慈。” “怎么了屋匕?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵葛碧,是天一觀的道長。 經(jīng)常有香客問我过吻,道長进泼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任纤虽,我火速辦了婚禮乳绕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逼纸。我一直安慰自己洋措,他們只是感情好,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布杰刽。 她就那樣靜靜地躺著菠发,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贺嫂。 梳的紋絲不亂的頭發(fā)上滓鸠,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機與錄音第喳,去河邊找鬼糜俗。 笑死,一個胖子當著我的面吹牛曲饱,可吹牛的內(nèi)容都是我干的悠抹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼扩淀,長吁一口氣:“原來是場噩夢啊……” “哼楔敌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起引矩,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤梁丘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后旺韭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氛谜,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年区端,在試婚紗的時候發(fā)現(xiàn)自己被綠了值漫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡织盼,死狀恐怖杨何,靈堂內(nèi)的尸體忽然破棺而出酱塔,到底是詐尸還是另有隱情,我是刑警寧澤危虱,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布羊娃,位于F島的核電站,受9級特大地震影響埃跷,放射性物質(zhì)發(fā)生泄漏蕊玷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一弥雹、第九天 我趴在偏房一處隱蔽的房頂上張望垃帅。 院中可真熱鬧,春花似錦剪勿、人聲如沸贸诚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酱固。三九已至,卻和暖如春赴涵,著一層夾襖步出監(jiān)牢的瞬間媒怯,已是汗流浹背订讼。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工髓窜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欺殿。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓寄纵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脖苏。 傳聞我的和親對象是個殘疾皇子程拭,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348