使用Jenkins配置SpringBoot的自由成長之路

一、相關閱讀

1、使用Jenkins配置Git+Maven的自動化構建

http://blog.csdn.net/xlgen157387/article/details/50353317

2、Jenkins部署Maven多環境項目(dev、beta、prod)的參數設置

3、使用Generic Webhook Trigger插件實現Jenkins+WebHooks(碼雲)持續集成

4、使用Generic Webhook Trigger插件實現Jenkins+WebHooks(碼雲)持續集成–指定具體分支集成

二、項目結構

使用Jenkins配置SpringBoot的自由成長之路

這是一個SpringBoot項目,碼雲地址爲:https://gitee.com/xuliugen/ufind-server(私有的,不用試啦!)

這裏假設你已經配置好了Jenkins的環境,如果還沒有配置的話可以參考上文中的相關閱讀進行配置。

三、配置Jenkins

1、新建Job

使用Jenkins配置SpringBoot的自由成長之路

這裏是因爲我已經新建了一個相同名字的所以會報已經存在,忽略即可!

2、設置具體內容

使用Jenkins配置SpringBoot的自由成長之路

這裏指定項目名稱和描述,以及源碼管理中的Git地址和用戶名密碼。

使用Jenkins配置SpringBoot的自由成長之路

Build指定源代碼拉下來之後需要做的事情,Post Steps指定編譯好之後需要做的事情。

其他沒有截圖的默認即可!

3、具體分析:

(1)Build是當把代碼拉下來之後需要做的操作,由於是一個maven項目,因此我們需要指定編譯打包的命令,這裏是:

clean package -Dmaven.test.skip=true

注意這裏沒有mvn,因爲他是默認使用maven編譯的!完整的命令是:

mvn clean package -Dmaven.test.skip=true

其中:-Dmaven.test.skip=true 是跳過測試。

(2)關鍵是Post Steps的腳本,這裏詳細的解釋:

首先,我們應該要明白Jenkins的原理,他是這樣的,如果我們在新建的時候指定了Maven項目和代碼的Git地址,Jenkins首先會通過Git將代碼clone到本地,然後執行在Build中指定的pom.xml文件和指定的命令。

下邊是Jenkins的工作區間詳細信息(默認位置是:~/.jenkins):

使用Jenkins配置SpringBoot的自由成長之路

這裏的workspace就是我們創建的任務的工作區間:

使用Jenkins配置SpringBoot的自由成長之路

可以看到就有我們上述創建的ufind-server,如下:

使用Jenkins配置SpringBoot的自由成長之路

最後的編譯好的jar的位置就是:

/home/xuliugen/.jenkins/workspace/ufind-server/ufind-web/target

然後,我們可以根據需要將編譯好的jar移到另外一個位置,然後啓動即可,在啓動的時候是後臺啓動,不然的話他的日誌會一直顯示在Jenkins的任務界面(有興趣的可以試一下效果!),後臺啓動的時候需要把進程ID記錄到一個文件中,這裏是:ufind-web.pid

因此,上圖中的腳本的完整解釋如下:

使用Jenkins配置SpringBoot的自由成長之路

這裏需要注意的是設置export BUILD_ID=dontKillMe,另一個是每次啓動的時候先要殺掉以前的進程,不然的話不會啓動還會報錯!

可以看出,只要明白了Jenkins的工作機制,儘管目前Jenkins上SpringBoot相關的插件還沒有,但是我們可以一步步的通過腳本的方式進行運行!

四、運行結果

使用Jenkins配置SpringBoot的自由成長之路

使用Jenkins配置SpringBoot的自由成長之路

通過遊覽器訪問服務是否可以正確的運行!

五、將編譯好的jar文件傳到另一個服務器

上述中我們只是通過cp命令將編譯好的jar移動到同一個服務器中的另外一個位置,正常情況肯定不會是這樣的,他應該是其他服務器上指定的位置,並且服務器的數量可能還不止一個。因此,我們下邊研究一下!

將一個文件從一個服務器移動到另一個服務器使用的是scp命令,例如:

使用Jenkins配置SpringBoot的自由成長之路

scp是一個基於ssh的Linux環境下傳輸文件的好工具,但是使用shell腳本調用scp時會面臨一個問題,即scp強制要求通過交互方式輸入密碼,而不像mysql等擁有-u -p選項。

下面有兩種方法幫助shell腳本跨過輸入密碼這個障礙!

1、建立機器間完全信任關係

假設需要從機器A傳輸文件至機器B

(1)在機器A上運行

ssh-keygen -t rsa

上述命令會在~/.ssh/目錄生成私鑰證書id_rsa和公鑰證書id_rsa.pub

(2)將公鑰證書id_rsa.pub複製到機器B的用戶根目錄的.ssh子目錄中,再將文件內容append到文件authorized_keys中。

其實只要用一條單行命令就可以完成步驟2,它被commandlinefu.com的用戶投票選爲十大最酷的Linux單行命令之一:

ssh-copy-id [-i [identity_file]] [user@]machine

identity_file是公鑰證書的路徑,默認情況下是~/.ssh/id_rsa.pub.

如果要建立雙方向的完全信任關係,還要從機器B到機器A再重複一遍上面的操作。

不過這樣的方法並不完美,一是運維成本太高,二是機器間的安全屏障完全消失,安全代價太大,所以本人強烈推薦第二種方法。

2、expect腳本

expect腳本是一種建立在tcl基礎上的腳本語言,曝光率不高,卻堪稱shell腳本的好基友。expect腳本爲交互而生,被設計爲專門針對交互式程序的工具,常與對telnet、ftp、fsck、rlogin、tip、scp等配合使用。使用之前要先安裝expect,安裝過程(Ubuntu Server):

使用Jenkins配置SpringBoot的自由成長之路

Expect中最關鍵的四個命令是send、expect、spawn、interact

send:用於向進程發送字符串expect:從進程接收字符串spawn:啓動新的進程interact:允許用戶交互

示例代碼例如:

使用Jenkins配置SpringBoot的自由成長之路

運行結果:

使用Jenkins配置SpringBoot的自由成長之路

可以發現文件已經上傳成功!

上面是一個獨立的expect腳本文件,如果像把這段腳本嵌入其它shell腳本中就要用到expect -c

使用Jenkins配置SpringBoot的自由成長之路

使用Jenkins配置SpringBoot的自由成長之路

使用Jenkins配置SpringBoot的自由成長之路

簡單測試之後,那我們的腳本應該改成如下方式:

使用Jenkins配置SpringBoot的自由成長之路

這裏執行了遠程主機192.168.1.241上的一個腳本startup.sh,腳本如下:

使用Jenkins配置SpringBoot的自由成長之路

爲什麼,執行這個遠程腳本而不是直接通過expect執行哪?哈哈,你可能沒有想到,這是因爲本人能力有限,多次嘗試使用expect執行都沒有成功,所以,不得已才使用這麼愚蠢的方式!哈哈,不要打我!

看執行的結果:

使用Jenkins配置SpringBoot的自由成長之路

使用Jenkins配置SpringBoot的自由成長之路

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章