jenkins 遠程發布指令碼方法,jenkins發布指令碼
jenkins 遠程發布指令碼方法。jenkins 本地發布指令碼中,通過cp命令將編譯好的jar移動到同一個伺服器中的另外發布目錄,然後發布。正常情況肯定不會是這樣的,他應該是其他伺服器上指定的位置,並且伺服器的數量可能還不止一個。
將一個檔案從一個伺服器移動到另一個伺服器使用的是scp命令。但是使用shell指令碼調用scp時會面臨一個問題,即scp強制要求通過互動方式輸入密碼,而不像mysql等擁有-u -p選項。為了達成自動化部署,我們要借用expect指令碼。
expect安裝
cenos執行 yum install expect -y 命令安裝指令碼,因為其依賴了tcl,所以,也會跟著把tcl一起安裝了。
Expect中最關鍵的四個命令是send、expect、spawn、interact。
send:用於向進程發送字串 expect:從進程接收字串 spawn:啟動新的進程 interact:允許使用者互動伺服器間檔案傳輸
首先來做一個小實驗,需求是將檔案重A伺服器傳輸到B伺服器。這裡利用Expect來實現兩台伺服器間的檔案傳輸。
在A伺服器指定目錄/home/pec/tmp下建立一個tranport.sh
cd /home/pec/tmp //切換到指定目錄touch tranport.sh //建立檔案vi tranport.sh //編輯
在tranport.sh添加以下內容:
#!/usr/bin/expectspawn scp -P 22 /var/lib/jenkins/workspace/demo-test/target/demo-test-0.0.1-SNAPSHOT.jar root@192.168.56.103:/home/pec/wwwexpect "*assword" {set timeout 300; send "123456\r";}expect "*#"interact
說明:
1. /var/lib/jenkins/workspace/demo-test/target/demo-test-0.0.1-SNAPSHOT.jar 表示的是A伺服器的檔案路徑,
2. root@192.168.56.103:/home/pec/www 表示 【B遠程主機的使用者名稱@B遠程主機的ip地址:B遠程主機上接收檔案的目錄】
3. 123456 表示 B遠程主機的密碼
最後一步就是執行tranport.sh檔案了,注意執行之前,要給tranport.sh可執行檔許可權,不然是無法執行的。
chmod +x startup.sh //賦予檔案可以行的許可權 ./startup.sh //執行檔案
按照提示,就可以將檔案從一台伺服器,傳輸到另一台伺服器了。讀者可以在B的伺服器目錄查看下。
遠程發布指令碼
需求和上述情況基本是一樣的,利用jenkins將伺服器A編譯打包好的jar包,遠程傳送到B伺服器,並讓其在B伺服器上運行起來。
把工作區分,A伺服器上的jinkens負責編譯打包並執行B伺服器上的發布指令碼。B伺服器則準備好發布位置和發布指令碼,供伺服器A調用。當然這裡B伺服器得有Java運行環境才行。
B伺服器先做好準備:
發布目錄:/home/pec/www 發布指令碼:startup.sh 儲存pid的檔案:demo-test.pid
以上名字都隨便取,只要尾碼一樣,並且使用時別用錯就行。
mkdir /home/pec/www //建立目錄cd /home/pec/www //切換至目錄下touch demo-test.pid //建立儲存pid的檔案touch startup.sh //建立指令檔startup.shchmod +x startup.sh //給指令碼startup.sh賦予可執行檔許可權vi startup.sh //編輯
在startup.sh檔案中添加以下代碼:
#!/bin/bashwww_path=/home/pec/wwwjar_name=demo-test-0.0.1-SNAPSHOT.jarpid=$(cat /home/pec/www/demo-test.pid)if ${pid}; then echo "pid is null"else kill -9 ${pid}ficd ${www_path}java -jar ${jar_name} &echo $! > /home/pec/www/demo-test.pid
OK,B伺服器得準備工作就都完成了。
A伺服器上要做的事情:
其他的就不看了,直接給指令碼吧,在jenkins任務中配置Post Steps,其指令碼如下:
#!/bin/bash export BUILD_ID=dontKillMewww_path=/home/pec/wwwjar_path=/var/lib/jenkins/workspace/demo-test/targetjar_name=demo-test-0.0.1-SNAPSHOT.jarexpect -c "spawn scp -P 22 ${jar_path}/${jar_name} root@192.168.56.103:${www_path}expect \"*assword\" {set timeout 300; send \"123456\r\";} expect \"yes/no\" {send \"yes\r\"; exp_continue;}"expect -c "spawn ssh root@192.168.56.103expect { \"*assword\" {set timeout 300; send \"123456\r\";} \"yes/no\" {send \"yes\r\";exp_continue}} expect \"*#\" send \"cd /home/pec/www\r\"expect \"*#\"send \"sh startup.sh\r\"expect \"*#\"send \"exit\""
儲存後立即構建即可完成服務的遠程發布。這裡沒有具體些jenkins的配置和其他東西,那些如JDK、mvaen、git等配置,請讀者自行Google。