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

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

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

上一篇介紹了手動和自動發布包到maven私有庫,這篇主要介紹通過SSH進行自動部署。

再回到前面的jenkinsDemo任務編輯頁面,在構建的下面能看到“構建后操作”:


image.png

我們點開“增加構建后操作步驟”:


image.png

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

部署到linux服務器上并運行

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

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

1. 安裝SSH插件

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


image.png

2. 通過SSH部署

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


image.png

選擇“Send build artifacts over SSH”:


image.png

在這個界面我們可以看到SSH Publishers下是SSH Server,下方有個“Add Server”;這說明我們可以一次構建部署到多個不同的SSH Server上。
然后SSH Server的構成是2部分,一個是Name,另一個是Transfers;而Transfer又是多個Transfer Set構成的。
Transfer Set上我們能看到“Source files”、“Remove prefix”、“Remote directory”和“Exec command”。從字面上就可以初步理解這些代表什么意思:
Source files:需要傳輸的文件
Remove prefix:去除前綴
Remote directory:需要傳輸文件到哪
Exec command:執行命令

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


image.png

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


image.png

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


image.png

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


image.png

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

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


image.png

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


image.png

發現一種是要輸入密碼的,一種是免密的方式;根據具體要求來定,我這里用密碼的方式。


image.png

測試下是否成功:


image.png

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


image.png

可以看到SSH Server的Name直接是剛才配置的node2了,一般會配置多個,根據自己需要部署的具體Server選擇。

那么接下的Source files要怎么選擇呢,這是和構建的具體結構有關的。以我選擇的這個spring cloud工程為例,首先我需要做的是運行eureka工程下jar包,也就是啟動eureka的注冊中心。
我們來看下這個jar的位置,回到任務的主頁點開工作空間:


image.png

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


image.png

image.png

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


image.png

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


image.png

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


image.png

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


image.png

這里其實基本相當于你手動操作時在服務器上可以進行的操作,只是將命令放到jenkins中了。
到這里,配置基本結束了;我們先保存,點擊立即構建看是否能成功。


image.png

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


image.png

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

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

先看下第一種方式:


image.png

保存后運行:


image.png

在控制臺可以看到命令執行了,這里是eureka集群,控制臺中會有些錯誤信息;直接看最后的結果:


image.png

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


image.png

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

那我們來看第二種方式,先創建好install.sh,并授權:

chmod 777 install.sh

image.png

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


image.png

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


image.png

保存后運行:


image.png

發現還是不行,難道只能寫全路徑了嗎?在網上找了個方案,在最前面加上:

source /etc/profile

image.png

這次和第一次一樣了,最后的結果也是一樣,說明直接在編輯界面用命令行和編輯界面運行shell效果是一樣的。這里最關鍵的地方是要運行source /etc/profile,這樣才能拿到需要部署服務器的環境變量。

這和我們期望的還是有一點差距,如果是自己跑demo基本上到這里就可以了;但是公司里運行的話這樣肯定不行,這是不穩定的構建。接下來我們進行改造,還是用第二種方式,在shell腳本中編寫;這樣的好處顯而易見,Jenkins的編輯界面這里只管調用shell腳本(shell腳本可以寫得很靈活,接收各種參數,這里就不擴展了)。

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

nohup command > myout.file 2>&1 &

這是指定輸出文件:其中nohup將程序以忽略掛起信號的方式運行起來,末尾空格加&;如果不指定輸出文件,會掛起來要ctrl + c才能進入命令行。
還有一種方式,輸出到空(這里的/dev/null 是設備文件,不是普通文件,如果系統上沒有不要用普通創建文件的方式去執行,會導致系統不能連接。。。):

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

經過測試可以去掉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進程后再重新執行構建:


image.png

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


image.png

檢查下java進程:


image.png

啟動日志輸出文件:


image.png

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,899評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,844評論 2 372