首先这边是乙方,项目多,系统多。新上线的项目都是脚本去做发布,早上又赶了套脚本。


之前公司有兄弟运行了下面这套脚本未加参数,说静态资源未发成功,tomcat 和发布系统的agent反而给干没了,于是又做了点优化,加了参数判断。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
cat  copy_h5_mall_new.sh 
#!/bin/sh
#copy h5 mall
nginx_static_ip=10.10.13.37
time_stamp=` date  + "%Y-%m-%d-%H-%M-%S" `
h5_mall_zip_name=$1
war_md5=`md5sum .. /static/ ${h5_mall_zip_name} |  awk  '{print $1}' `
md5_file=` cat  .. /static/ ${h5_mall_zip_name}.md5 |  awk  '{print $1}' `
if  [ $ # -ne "1" ];then
     echo  "不看脚本就运行,干死你!"
else
     if  "${war_md5}"  "${md5_file}"  ]; then
         ssh  ${nginx_static_ip}  "cp -r /data/desheng/h5_mall /data/desheng/h5_mall-${time_stamp}"
         ssh  ${nginx_static_ip}  "cd /data/desheng/h5_mall && /bin/rm -rf *"
         scp  .. /static/ ${h5_mall_zip_name} ${nginx_static_ip}: /data/desheng/h5_mall
         ssh  ${nginx_static_ip}  "cd /data/desheng/h5_mall && unzip ${h5_mall_zip_name}"
         ip_list=` cat  .. /env .sh |  grep  "frontier-cms-web"  cut  -d  "="  -f1 |  cut  -d  "#"  -f2 |  uniq `
         for  ip  in  ${ip_list[*]}; do
             ssh  $ip  "cd /data/static/10 && cp -r h5_mall h5_mall-${time_stamp}"
             ssh  $ip  "cd /data/static/10/h5_mall && /bin/rm -rf *"
             scp  .. /static/ ${h5_mall_zip_name} $ip: /data/static/10/h5_mall/
             ssh  $ip  "cd /data/static/10/h5_mall && unzip ${h5_mall_zip_name}"
         done
     fi
fi


#这个脚本早上临时做的,发现这个静态资源还没有脚本发布。脚本主要对参数和运行脚本的用户做了判断。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cat  copy_cms_static.sh 
#!/bin/bash
war=$1
nginx_static_ip=10.10.1.28
temp_time=` date  +%Y-%m-%d-%H-%M-%S`
if  [ ` whoami ` ==  "ody"  ]; then
     if  [ $ # -ne "1" ];then
         echo  -n  "输入的参数不对,请重新输入."
     else
         ssh  ${nginx_static_ip}  "cd /data/stgds/ && cp -r cms_dev{,-${temp_time}}"
         ssh  ${nginx_static_ip}  "cd /data/stgds/cms_dev/ && /bin/rm -rf ./*"
         scp  .. /static/ ${war} ${nginx_static_ip}: /data/stgds/cms_dev/
         ssh  ${nginx_static_ip}  "cd /data/stgds/cms_dev/ && unzip ${war}"
     fi
else
     echo  -n  "当前用户不是ody用户."
fi


下面是新项目一套发布脚本,昨天改的,运行一天还未见报错、未见发布失败的。


war包发布的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# cat deploy_new.sh 
#!/bin/sh
read  -p  "请输入你需要发布的Poll Name:"  pool_name
if  "$pool_name"  ""  ]; then
     echo  "pool_name 不支持为空!"
else
     product_ip_list=` cat  . /deploy_env .ini |  grep  ${pool_name} |  awk  -F  '='  '{print $2}' `
     time_stamp=` date  + "%Y-%m-%d-%H-%M-%S" `
     function  shutdown_tomcat() {
         ip=$1
     tomcat_port=8080
     tomcat_id=` ssh  ody@$ip  ps  -ef |  grep  java |  grep  "tomcat"  grep  - v  "grep"  awk  '{print $2}' `
     if  [ ! $tomcat_id ]; then
         echo  "tomcat process in ${ip} is not exist."
     else
         echo  "shutdown tomcat in ${ip}"
         ssh  ody@$ip  "/bin/kill -9 $tomcat_id"
             if  [ $? == 0 ]; then
                 echo  "shutdown ody@$ip tomcat process is success."
             else
                 echo  "shutdown ody@$ip tomcat process is false."
                 exit  2
             fi
     fi
     }
     function  start_tomcat() {
     ip=$1
     echo  "start tomcat in ${ip}."
     ssh  ody@$ip  "JAVA_HOME=/usr/local/java/jdk1.7.0_80;export JAVA_HOME;/bin/sh /data/tomcat/bin/startup.sh"
     ssh  ody@$ip  "/usr/local/java/jdk1.7.0_80/bin/jps"
     }
     if  [ ` whoami ` ==  "ody"  ]; then
           ssh  10.18.3.200  "cd /data/war && md5sum -c ${pool_name}.war.md5"
           if  [ $? - eq  0 ]; then
             pool_ip_list=` awk  'BEGIN{list="' ${product_ip_list} '";split(list,ip_list,",");for(ip in ip_list){print ip_list[ip];}}' `
             for  deploy_ip  in  ${pool_ip_list[*]}; do
                 shutdown_tomcat ${deploy_ip}
                    ssh  ${deploy_ip}  "cd /data/tomcat/webapps && mv ${pool_name}.war ${pool_name}.war-${time_stamp}"
                      ssh  ${deploy_ip}  "cd /data/tomcat/webapps && rm -rf ${pool_name}"
                      scp  10.18.3.200: /data/war/ ${pool_name}.war  /data/war/
                      scp  /data/war/ ${pool_name}.war ${deploy_ip}: /data/tomcat/webapps
                      start_tomcat ${deploy_ip}
                     done
              else
                         echo  "md5 check false."
                         exit  2
             fi
     else
         echo  "please use ody user to exec this shell."
     fi
fi

脚本中的deploy_env.ini文件,是war和ip对应的关系:

大致是下面的样子:

1
2
3
# cat deploy_env.ini 
ad-whale=10.18.1.1,10.18.1.64
ad-whale-web=10.18.1.2