shell編程 (Jenkins)自動化部署腳本

代替人工部署的步驟:

  1. 編譯打包
  2. 通過ftp發送到服務器
  3. 安裝部署
    a、先找到久的進程
    b、殺死進程
    c、安裝啓動

使用shell腳本實現自動化部署:

(附shell語法使用詳細備註)

#!/bin/bash
# 系統打包
PROFILE_NAME=${PROJECT_NAME}
#使用當前最新的環境變量
source /etc/profile
#定義模塊名
MODEL_LIST=(
    project-demo1
    project-demo2
)
#定義模塊的路徑
MODEL_PATH=(
    /usr/local/project-demo1
    /usr/local/project-demo2
)

SEND_IP=xxx.xx.x.xx
SEND_HOST=${SEND_IP}
SEND_HOST_DIR=/opt/JENKINS-BUILD-RPMS

BASE_DIR=/root/
JENKINS_DIR=/home/jenkins/workspace
TARGET_DIR=${BASE_DIR}/JENKINS-BUILD

mkdir -p $TARGET_DIR

rm -rf $TARGET_DIR/${PROFILE_NAME}*.rpm

LOCAL_DIR=/usr/local

if [[ $PROFILE_NAME = package* ]]; then
	cd $JENKINS_DIR
	bash "$PROFILE_NAME".sh
    exit 0;
fi

# ssh連接遠程服務器執行命令,創建目錄
ssh root@${SEND_HOST} "mkdir -p ${SEND_HOST_DIR}"
#循環所有的項目模塊路徑;
#獲取數組的中的所有元素:${array_name[@]}或${array_name[*]}
for ((i = 0; i < ${#MODEL_PATH[@]}; i++)); do
	#要編譯的項目名
	if [ "$PROFILE_NAME" = "all" ]; then
		cd $JENKINS_DIR/${MODEL_PATH[$i]}
		echo "$JENKINS_DIR/${MODEL_PATH[$i]}"
		# make被執行時,它會掃描當前目錄下Makefile或makefile文件找到目標以及其依賴
		# makefile文件包含了將程序打包成一個rpm包
        make
        # $0是上一條命令make的返回值,0表示沒有錯誤,其他任何值表明有錯誤
        if [ "$?" != "0" ]; then
            echo "編譯失敗"
            #exit是1時,認爲程序是正常運行並退出;exit非0時,程序產生了一個錯誤
            exit 1;
        fi
        # ssh連接遠程服務器執行命令,刪除目錄
        ssh root@${SEND_HOST} "rm -rf ${SEND_HOST_DIR}/${MODEL_LIST[$i]}*.rpm"
        #scp 複製文件: scp file root@send_host:/path/
        scp -rp $JENKINS_DIR/${MODEL_PATH[$i]}/rpm/*.rpm root@${SEND_HOST}:${SEND_HOST_DIR}/
        echo "推送${MODEL_LIST[$i]}的RPM到${SEND_HOST}成功!"
        # 刪除舊的rpm包
        ssh root@${SEND_HOST} "rpm -e ${MODEL_LIST[$i]}"
        # 安裝新的rpm包
        ssh root@${SEND_HOST} "rpm -ivh ${SEND_HOST_DIR}/${MODEL_LIST[$i]}*.rpm"
        echo "在${SEND_HOST}上安裝${MODEL_LIST[$i]}成功!"
	fi
	#要編譯的項目名是某模塊名
    if [ "$PROFILE_NAME" = "${MODEL_LIST[$i]}" ]; then
        cd $JENKINS_DIR/${MODEL_PATH[$i]}
		echo "$JENKINS_DIR/${MODEL_PATH[$i]}"
        make
        if [ "$?" != "0" ]; then
            echo "編譯失敗"
            exit 1;
        fi
        ssh root@${SEND_HOST} "rm -rf ${SEND_HOST_DIR}/${PROFILE_NAME}*.rpm"
        scp -rp $JENKINS_DIR/${MODEL_PATH[$i]}/rpm/*.rpm root@${SEND_HOST}:${SEND_HOST_DIR}/
        echo "推送${PROFILE_NAME}的RPM到${SEND_HOST}成功!"
        ssh root@${SEND_HOST} "rpm -e ${PROFILE_NAME}"
        ssh root@${SEND_HOST} "rpm -ivh ${SEND_HOST_DIR}/${PROFILE_NAME}*.rpm"
        echo "在${SEND_HOST}上安裝${PROFILE_NAME}成功!"
        break
    fi
done
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章