JAVA/PHP灰度發佈腳本

  1.  JAVA灰度發佈腳本
JAVA灰度發佈腳本

#!/bin/bash
  
# 設置時間變量
CTIME=$(date "+%Y-%m-%d-%H-%M")
# 項目名稱,建議和gitlab倉庫名稱一致
project=
# 本地代碼目錄(gitlab拉取代碼後存放目錄)
CODE_DIR=/data/gitlab/"$project"
# 臨時代碼目錄,用來修改配置文件和編譯打包代碼
TMP_DIR=/data/tmp/"$project"
# 用來存放war包
WAR_DIR=/data/war/"$project"
# 對應環境配置文件
deploy_conf=/data/conf/pro/"$project"/*
# 代碼中的配置文件路徑
local_conf=$TMP_DIR/src/main/resources/config
# 遠程主機名稱
REMOTE_HOST="tomcat-01 tomcat-02"
# 遠程主機代碼目錄
REMOTE_CODE_DIR=/data/webapps/"$project"
# 遠程主機用戶
REMOTE_USER=root
# 遠程主機war包存放目錄
REMOTE_WAR_DIR=/data/war/
# 代碼臨時目錄
CODE_TMP=/data/code_tmp/
# 上線日誌
DEPKOY_LOG=/data/log/pro_log.log
  
# 腳本使用幫助
usage(){
   echo $"Usage: $0 [deploy tag | rollback_list | rollback_pro ver]"
}
  
# 拉取代碼
git_pro(){
   if [ $# -lt 1 ];then
        echo "請傳入tag"
        exit 1
   fi
   tag=$1
   cd $CODE_DIR && git checkout master && git pull && git checkout $1
   if [ $? != 0 ];then
    echo "拉取代碼失敗"
    exit 10
   fi
   cd $CODE_DIR && git pull 2>/dev/null >/dev/null
   # 推送代碼到臨時目錄
   rsync -avz --delete $CODE_DIR/ $TMP_DIR/ 2>/dev/null >/dev/null
}
  
# 設置代碼的配置文件
config_pro(){
   echo "設置代碼配置文件"
   rm -f $local_conf/config.properties
   rm -f $local_conf/alipay.properties
   rm -f $local_conf/jdbc.properties
   rm -f $local_conf/log4j.properties
   cp $deploy_conf $local_conf/
}
  
# 打包代碼
tar_pro(){
   echo "本地打包代碼"
   cd $TMP_DIR && /usr/local/maven/bin/mvn clean compile war:war && cp target/"$project".war "$WAR_DIR"/"$project"_"$tag"_"$CTIME".war
}
  
# 推送war包到遠端服務器
rsync_pro(){
   echo "推送war包到遠端服務器"
   for host in $REMOTE_HOST;do
    scp "$WAR_DIR"/"$project"_"$tag"_"$CTIME".war $REMOTE_USER@$host:$REMOTE_WAR_DIR
   done
}
  
# 解壓代碼包
solution_pro(){
   echo "解壓代碼包"
   for host in $REMOTE_HOST;do
    ssh $REMOTE_USER@$host "unzip "$REMOTE_WAR_DIR""$project"_"$tag"_"$CTIME".war -d "$CODE_TMP""$project"_"$tag"_"$CTIME"" 2>/dev/null >/dev/null
   done
}
 
# api測試
test_pro(){
   # 運行api測試腳本,如果api測試有問題,則退出部署
   if [ $? != 0 ];then
    echo "API測試存在問題,退出部署"
    exit 10
   fi
}
 
 
# 部署代碼
deploy_pro(){
   echo "部署代碼"
   for host in $REMOTE_HOST;do
    ssh haproxy "echo "disable server $project/$host" | /usr/bin/socat /var/lib/haproxy/stats stdio"
    ssh $REMOTE_USER@$host "rm -r $REMOTE_CODE_DIR"
    ssh $REMOTE_USER@$host "ln -s "$CODE_TMP""$project"_"$tag"_"$CTIME"/ $REMOTE_CODE_DIR"
    echo "重啓$host"
    ssh $REMOTE_USER@$host "/etc/init.d/tomcat restart"
    sleep 3
    # 執行api測試
    test_pro
    ssh haproxy "echo "enable server $project/$host" | /usr/bin/socat /var/lib/haproxy/stats stdio"
   done
}
# 列出可以回滾的版本
rollback_list(){
  echo "------------可回滾版本-------------"
  ssh $REMOTE_USER@$REMOTE_HOST "ls -r "$CODE_TMP" | grep -o $project.*"
}
  
# 回滾代碼
rollback_pro(){
  echo "回滾中"
  for host in $REMOTE_HOST;do
    ssh haproxy "echo "disable server $project/$host" | /usr/bin/socat /var/lib/haproxy/stats stdio"
    ssh $REMOTE_USER@$host "rm -rf $REMOTE_CODE_DIR"
    ssh $REMOTE_USER@$host "ln -s "$CODE_TMP"$1/ $REMOTE_CODE_DIR"
    ssh $REMOTE_USER@$host "/etc/init.d/tomcat restart"
    sleep 3
    ssh haproxy "echo "enable server $project/$host" | /usr/bin/socat /var/lib/haproxy/stats stdio"
  done
}
  
# 記錄日誌
record_log(){
  echo "$CTIME 主機:$REMOTE_HOST 項目:$project tag:$1" >> $DEPKOY_LOG
}
  
# 代碼執行選項設置
main(){
  case $1 in
   deploy)
   git_pro $2;
   config_pro;
   tar_pro;
   rsync_pro;
   solution_pro;
   deploy_pro;
   record_log $2;
   ;;
   rollback_list)
   rollback_list;
   ;;
   rollback_pro)
   rollback_pro $2;
   record_log;
   ;;
   *)
   usage;
   esac
}
main $1 $2
  1. PHP灰度發佈腳本
PHP 自動發佈腳本 
#!/bin/bash
 
# 設置時間相關變量
CTIME=$(date "+%Y-%m-%d-%H-%M")
# 項目名稱,建議和gitlab倉庫名稱一致
project=test
# 本地代碼目錄(gitlab拉取代碼後存放目錄)
CODE_DIR=/data/gitlab/pro/$project/
# 遠程主機
REMOTE_HOST="LNMP-01.fblinux.com LNMP-02.fblinux.com"
# 遠程主機代碼目錄
REMOTE_DIR=/data/www/fblinux/
# 遠程主機用戶
REMOTE_USER=root
# 遠程主機代碼執行用戶
CODE_USER=php
# 上線日誌
DEPKOY_LOG=/data/log/pro_log.log
 
#腳本使用幫助
usage(){
   echo $"Usage: $0 [deploy tag]"
}
 
#拉取代碼
git_pro(){
   if [ $# -lt 1 ];then
        echo "請傳入tag"
        exit 1
   fi
   echo "拉取代碼"
   cd $CODE_DIR && git checkout master && git pull && git checkout $1
   if [ $? != 0 ];then
    echo "拉取代碼失敗"
    exit 10
   fi
   cd $CODE_DIR && git pull
}
 
#推送代碼服務器
rsync_pro(){
for host in $REMOTE_HOST;do
   echo "推送代碼到服務器$host"
   rsync -rPv -P --delete --exclude="config.php" --exclude=".git" $CODE_DIR  -e 'ssh -p 22' $REMOTE_USER@$host:$REMOTE_DIR
   if [ $? != 0 ];then
    echo "推送代碼失敗"
    exit 10
   fi
   echo "代碼授權"
   ssh $REMOTE_USER@$host "chown -R $CODE_USER $REMOTE_DIR"
   if [ $? != 0 ];then
    echo "代碼授權失敗"
    exit 10
   fi
done
}
 
#記錄日誌
record_log(){
  echo "$CTIME 主機:$REMOTE_HOST 項目:$project tag:$1" >> $DEPKOY_LOG
}
 
main(){
  case $1 in
   deploy)
   git_pro $2;
   rsync_pro;
   record_log $2;
   ;;
   *)
   usage;
   esac
}
main $1 $2

 

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