Linux通過shell執行自動化部署

YatHo發表於2017-03-02

背景

  通過shell判斷是否存在補丁更新,進行自動化的部署

 

程式碼

  1 #!/bin/sh 
  2 #Edit:何彥霆
  3 #version:1.0.0 beta
  4 
  5 #執行環境初始化
  6 source /hxspace/production/bin/setenv.sh
  7 
  8 #變數說明
  9 #$1-外部提供,日期補丁(格式要求BD_2017-03-02)     
 10 #Paths_Way-補丁存放目錄   
 11 #Tomcat_Way-tomcat中介軟體目錄 
 12 #Tomcat_Start_Way-tomcat中介軟體啟動檔案位置(載入so存在該限制,不能直接使用工程下的啟動檔案) 
 13 #Env_Wabapp_Way-web應用目錄  
 14 #Env_Bus_Way-BUS工程目錄
 15 
 16 BD_Data=$1
 17 Paths_Way="/mnt/patches"
 18 Tomcat_Way="/hxspace/production/server/apache-tomcat-8.5.9"
 19 Tomcat_Start_Way="/hxspace/production/bin"
 20 Env_Wabapp_Way="/hxspace/production/webroot"
 21 Env_Bus_Way="/hxspace/production/bus"
 22 
 23 function Env_WEB_updata()
 24 {
 25     WEB_name=$1
 26     WEB_way=$2
 27 
 28     #判斷Mall_WEB元件更新
 29     if [ -d ./${WEB_name} ];then
 30     
 31         echo "存在${WEB_name}補丁,準備進行${WEB_name}環境更新"
 32 
 33         #down掉伺服器tomcat
 34         sh ${Tomcat_Way}/bin/shutdown.sh
 35         sleep 5s
 36 
 37         #清空部署啟動目錄下,WEB應用檔案
 38         mkdir -p ${Env_Wabapp_Way}/${WEB_way}
 39         rm -rf ${Env_Wabapp_Way}/${WEB_way}/*
 40         cp -rf ${Paths_Way}/${BD_Data}/${WEB_name}/* ${Env_Wabapp_Way}/${WEB_way}
 41 
 42 
 43         #啟動WEB
 44         sh ${Tomcat_Start_Way}/tomcat_run.sh
 45         echo "Mall_WEB環境更新完成"
 46         
 47     else
 48     
 49         echo "${WEB_name}更新補丁不存在,${WEB_name}更新結束"
 50         
 51     fi
 52 
 53 }
 54 
 55 function Env_BUS_updata()
 56 {
 57     BUS_name=$1
 58     BUS_port=$2
 59     BUS_way=$3
 60     echo ${BUS_name}    
 61     echo ${BUS_port}    
 62     echo ${BUS_way}    
 63     #判斷元件更新
 64     #if [ -d ./${BUS_name}* ];then
 65     result=`ls -l | grep ${BUS_name}*`
 66     #if [[ "$result" != "" ]];then
 67     if [ -d ./${result} ];then
 68     
 69         echo "存在${BUS_name}補丁,準備進行${BUS_name}環境更新"
 70 
 71         #判斷Server 程式是否存在 - centos 使用判斷監控PID
 72         Sc_Pid=`netstat -nlp | grep ${BUS_port} | awk '{print $7}' | awk -F "/" '{print $1}'`
 73 
 74         #判斷20025埠是否被監聽,如果正在監聽,kill
 75         if [ ! $Sc_Pid ]; then  
 76         
 77             echo "IS NULL"    
 78             
 79         else  
 80         
 81             echo "NOT NULL"  
 82             kill -9 $Sc_Pid
 83 
 84         fi
 85         
 86         #拷貝殼子進行覆蓋
 87         mkdir -p ${Env_Bus_Way}/${BUS_way}
 88         cp -rf './TBAServer(2.1.9.4)'/* ${Env_Bus_Way}/${BUS_way}
 89         
 90         if [ -d ./${BUS_name}_conf ];then
 91         
 92             echo "${BUS_name}_conf存在補丁,準備進行環境更新"
 93             
 94             #清空部署啟動目錄下,Collect_bus_conf檔案
 95             rm -rf ${Env_Bus_Way}/${BUS_way}/config.ini
 96             rm -rf ${Env_Bus_Way}/${BUS_way}/classes/*
 97             rm -rf ${Env_Bus_Way}/${BUS_way}/*.so
 98             
 99             mkdir -p ${Env_Bus_Way}/${BUS_way}
100             cp -rf ${Paths_Way}/${BD_Data}/${BUS_name}_conf/* ${Env_Bus_Way}/${BUS_way}
101             
102             #啟動bus-採用重啟
103             sh ${Env_Bus_Way}/${BUS_way}/restart.sh
104             echo "${BUS_name}_conf補丁,更新完成"
105             
106         else
107         
108             echo "${BUS_name}_conf補丁不存在"
109             
110         fi
111 
112         if [ -d ./${BUS_name}_lib ];then
113         
114             echo "${BUS_name}_lib存在補丁,準備進行環境更新"
115             
116             #清空部署啟動目錄下,${BUS_name}_lib檔案
117             mkdir -p ${Env_Bus_Way}/${BUS_way}/lib
118             rm -rf ${Env_Bus_Way}/${BUS_way}/lib/*
119 
120             cp -rf ${Paths_Way}/${BD_Data}/${BUS_name}_lib/* ${Env_Bus_Way}/${BUS_way}/lib
121             
122             #啟動bus-採用重啟
123             sh ${Env_Bus_Way}/${BUS_way}/restart.sh 
124             echo "${BUS_name}_lib補丁,更新完成"
125             
126         else
127         
128             echo "${BUS_name}_lib補丁不存在"
129             
130         fi
131 
132         if [ -d ./${BUS_name}_classes ];then
133                 
134             echo "${BUS_name}_classes存在補丁,準備進行環境更新"
135             
136             #清空部署啟動目錄下,${BUS_name}_classes檔案
137             #工程classes檔案同配置檔案classes同目錄,才用覆蓋的方式
138             mkdir -p ${Env_Bus_Way}/${BUS_way}/classes
139 
140             cp -rf ${Paths_Way}/${BD_Data}/${BUS_name}_classes/* ${Env_Bus_Way}/${BUS_way}/classes
141             
142             #啟動bus-採用重啟
143             sh ${Env_Bus_Way}/${BUS_way}/restart.sh 
144             echo "${BUS_name}_classes補丁,更新完成"
145             
146         else
147         
148             echo "${BUS_name}_classes補丁不存在"
149             
150         fi            
151         
152     else
153         echo "${BUS_name}無補丁"
154     fi
155 }
156 
157 
158 #切換至補丁目錄
159 cd  ${Paths_Way}
160 
161 
162 #判斷補丁目錄下是否存在指定補丁
163 if [ -d ./$BD_Data ];then
164     echo "存在該補丁,準備進行環境更新"
165     cd ./$BD_Data
166     # BUS 更新,$1 - 補丁檔名  $2 - BUS監聽埠  $3 BUS部署路徑
167     Env_BUS_updata HX_ChenDu_LC_Mall_bus_test 20025 mall_bus
168     
169     Env_BUS_updata HX_ChenDu_LC_MallTimer_bus_test 20032 mall_timer
170     
171     Env_BUS_updata HX_ChenDu_pmc_bus_test 20028 pmc_bus
172     
173     Env_BUS_updata HX_ChenDu_pmc_Collect_bus_test 20042 collector_bus
174     
175     #WEB更新,$1 - 補丁檔名  $2 - WEB部署路徑
176     Env_WEB_updata HX_ChenDu_LC_Mall_WEB_Linux_Test mall
177     
178     #Env_WEB_updata HX_ChenDu_pmc_Collect_bus_test mkt    
179     
180 else
181     echo "補丁不存在,更新結束"
182     exit 0
183 fi

自動通過目錄標示判斷是否存在該模組補丁,進行補丁的移動合併和更新

相關文章