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

之前公司有兄弟运行了下面这套脚本未加参数,说静态资源未发成功,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