jenkins 遠程發布指令碼方法,jenkins發布指令碼

來源:互聯網
上載者:User

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。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.