Jenkins使用教程(中)

jenkins 入門教程(中)


上回繼續,本文以我託管在bitbucket上的一個開源項目spring-boot-rest-framework做爲演示,講解如何創建自動化部署。

一、創建item

點擊ok繼續,item的詳情頁面很長,我們分成一段段來講解,最上面這部分,除了名字要填寫外,其它全留空即可

然後是源代碼管理部分,這是一個git項目,先在Repository URL這裏填寫上項目的git地址(即:紅字1的位置),bitbucket是需要用戶名密碼才能訪問的,所以Credentials這裏要選擇相應的用 戶名、密碼(即:紅字2的部分),紅字3的部分爲git獲取的源代碼分支名稱,一般爲master主分支,也可以改成自己希望的分支。

可能有同學會問,紅字1處的git地址怎麼得到? 這個很簡單,bitbucket網站項目右上角里就有,見下圖:

另外,紅字2處對應的下拉框,首次進來時,應該是空的,可點擊右側的Add,添加用戶名,密碼,見下圖:

然後在Build的部分,點擊Add Build Step下拉框

本文中的這個項目是maven項目,所以我們選擇Invoke Maven3

然後輸入maven構建必要的參數,參考下圖:

 

然後保存,創建完成。

 

二、開始構建

保存後,系統會返回首頁,每個項目旁邊有一個小三角箭頭,選擇Build Now

 稍等片刻,左側就會出現一個進度條,表示正在Building...

點擊這個進度條上的鏈接,會看到構建詳情

繼續點擊進度條前的#x的序號,會看到左側有一個Console Output

點擊output,可以實時看到構建過程中的所有輸出,內容大致如下:

+ View Code

從輸出內容可以看出構建的整個過程:先從git上拉取源碼,然後調用maven命令進行構建。只不過這一切是在UI界面完成的,以後項目的Build工作就可以交由運維甚至測試人員直接來做了,程序員只管提交代碼即可。

 

三、遠程分發

編譯成功只是第一步,接下來要將編譯後的文件打包上傳到遠程服務器,通常在上傳前會壓縮一下,即節省帶寬,也方便傳輸。

參考剛纔添加maven參數的做法,再次點擊Add build step,只不過這次選擇Execute shell,即執行腳本,腳本內容如下:

即:進入工作目錄下的target目錄,然後將編譯後的jar包壓縮成.tar.gz包,大家可以參考圖中的命令自行調整。

接下來要上傳到遠程服務器,理論上講,應該繼續在上面的腳本里追加一行scp deploy.tar.gz user@remote_server:/remote_path之類的命令,大家可以嘗試一下,最後執行時多半會報沒有權限,原因是jenkins當前 運行的賬號通常不是root賬號,權限不夠。更好的做法是利用scp插件,以證書方式連接到遠程服務器(具體配置請參考上節SSH相關的部分),參考下圖:

在post-build actions下拉框裏,選擇Publish articifacts to SCP Repository

然後參考下圖填寫相應參數

然後保存,再次build,觀察Console Output

1
2
3
4
5
6
7
8
9
...
Build step 'Invoke Maven 3' changed build result to SUCCESS
[spring-boot-rest-framework] $ /bin/bash -xe /var/folders/sk/2f7knc1518g57382y5s4zxsr0000gn/T/hudson5867298139164607521.sh
+ cd /Users/yjmyzz/.jenkins/workspace/spring-boot-rest-framework
+ cd target
+ tar zcf deploy.tar.gz spring-boot-rest-framework-1.0.0.jar
[SCP] Connecting to deploy
[SCP] uploading file: '/opt/deploy/deploy.tar.gz'
Finished: SUCCESS

從輸出看,上傳文件已經ok

 

四、遠程應用重啓

最後就是遠程將上傳文件解壓,並啓動應用,我們可以事先寫一個shell腳本,放在服務器上(或者參考上一步的做法,用scp插件上傳到服務器),腳本內容參考下面這樣:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
export JAVA_HOME=/opt/app/jdk1.8.0_65
echo ${JAVA_HOME}
dir_base=/opt/deploy
cd ${dir_base}
echo 'deploying...'
if [ -r 'deploy.tar.gz'  ];then
  tar -zxvf deploy.tar.gz
fi
rm -rf *.gz
rm -rf ${dir_base}/logs
jar_name='spring-boot-rest-framework-1.0.0.jar'
if [ $(pgrep -f ${jar_name} | wc -l) -gt 0 ]; then
  pkill -9 -f ${jar_name}
fi
echo ${dir_base}/${jar_name}
nohup ${JAVA_HOME}/bin/java -jar ${dir_base}/${jar_name} >/dev/null 2>&1 &
sleep 2
echo 'ok!'

這段腳本的大概意思是,先檢測指定目錄下有無deploy.tar.gz文件,有的話就解壓,本文中的項目是一個spring-boot的項目,解 壓開後就是一個可獨立運行的jar包,然後先檢測當前進程中是否已經在運行,如果有,則先kill掉進程,最後用nohup以後臺方式運行jar包。假設 該腳本文件名爲deploy.sh,具備執行權限,我們可以在jenkins中通過插件遠程調用它,參考下圖的配置:
  

最後build下,還是觀察console output的變化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Build step 'Invoke Maven 3' changed build result to SUCCESS
[spring-boot-rest-framework] $ /bin/bash -xe /var/folders/sk/2f7knc1518g57382y5s4zxsr0000gn/T/hudson3712003549124736229.sh
+ cd /Users/yjmyzz/.jenkins/workspace/spring-boot-rest-framework
+ cd target
+ tar zcf deploy.tar.gz spring-boot-rest-framework-1.0.0.jar
[SCP] Connecting to deploy
[SCP] uploading file: '/opt/deploy/deploy.tar.gz'
SSH: Connecting from host [yangjunmingdeMacBook-Pro.local]
SSH: Connecting with configuration [deploy] ...
SSH: EXEC: STDOUT/STDERR from command [/opt/deploy/deploy.sh] ...
/opt/app/jdk1.8.0_65
deploying...
spring-boot-rest-framework-1.0.0.jar
tar: spring-boot-rest-framework-1.0.0.jar: time stamp 2016-01-20 22:52:15 is 143461.67416312 s in the future
/opt/deploy/spring-boot-rest-framework-1.0.0.jar
ok!
SSH: EXEC: completed after 2,230 ms
SSH: Disconnecting configuration [deploy] ...
SSH: Transferred 0 file(s)
Finished: SUCCESS

從第16行輸出的ok來看,遠程部署已經成功。  

 

最後上一張圖,大致描述了整個流程:


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