1 #!/bin/bash 2 3 export work_dir=/home/jenkins/work_dir/uat-coms-123 4 5 username=user 6 password=password 7 name=xxx-service- 8 coms_addr="ip1" 9 api_addr="ip2" 10 coms_user=root 11 12 cd ${work_dir} 13 function svn_update() { 14 for i in $@ 15 do 16 cd ${work_dir} 17 if [ -d "$i" ]; then 18 cd $i 19 local_revision=`/usr/bin/svn info |awk '/版本:/{i++;if(i<2){print $0}else{exit;}}'|cut -d' ' -f2` 20 url=`/usr/bin/svn info|grep URL|cut -d' ' -f2` 21 svn_revision=`/usr/bin/svn info ${url} |awk '/版本:/{i++;if(i<2){print $0}else{exit;}}'|cut -d' ' -f2` 22 if [ $local_revision -lt $svn_revision ];then 23 commit_people=`svn info ${url} |grep "最后修改的作者"|cut -d' ' -f2` 24 commit_time=`svn info ${url} |grep "最后修改的时间"` 25 echo "$i项目版本库有提交,现在开始更新本地库" 26 echo "$i项目最后提交项目工作人员为: $commit_people" 27 echo "$i项目${commit_time}" 28 /usr/bin/svn up 29 if [ $? -eq 0 ];then 30 echo "更新成功" 31 return 0 32 else 33 echo "更新失败" 34 return 1 35 fi 36 else 37 echo "本地已经是最新版本" 38 return 2 39 fi 40 else 41 echo "该项目在服务器上不存在,将首次拉取代码" 42 /usr/bin/svn --username $username --password $password co https://xxx.xxx.xxx/svn/coms/trunk/coms-common-parent/$i 43 cd ${work_dir} 44 return 3 45 fi 46 done 47 } 48 49 function mvn_common_install() { 50 for p in $@ 51 do 52 svn_update $p 53 if [ $? -eq 0 -o $? -eq 3 ];then 54 cd ${work_dir}/$p 55 echo "开始编译$p" 56 /data/maven-3.3.9/bin/mvn clean install -Denv=uat deploy 57 if [ $? -eq 0 ];then 58 echo "编译成功" 59 cd ${work_dir} 60 fi 61 fi 62 done 63 } 64 65 function mvn_service_install() { 66 for p in $@ 67 do 68 cd ${work_dir} 69 svn_update $p 70 if [ $? -eq 0 -o $? -eq 3 ];then 71 cd ${work_dir}/$p 72 echo "开始编译$p" 73 /data/maven-3.3.9/bin/mvn clean install -Denv=uat 74 if [ $? -eq 0 ];then 75 echo "编译成功" 76 fi 77 fi 78 done 79 } 80 81 function pack_common() { 82 mvn_common_install 公共包1 公共包2 公共包3... 83 } 84 85 function pack_service() { 86 mvn_service_install $1 87 } 88 89 function help_usage() { 90 cat <<EOF 91 1:包名1 2:包名2 3:包名3 92 4:包名4 5:包名5 93 EOF 94 } 95 96 function transfer_coms_consumer() { 97 consumer_path="/path" 98 scp -r ${work_dir}/$1/target/{$1.jar,lib} comsadmin@${coms_addr}:${consumer_path}/$1 99 if [ $? -eq 0 ];then 100 echo "代码发布成功" 101 return 10 102 else 103 return 11 104 fi 105 } 106 107 function transfer_coms_service() { 108 service_path="/path" 109 service_jar_name=`echo $1 |cut -d'-' -f3` 110 scp -r ${work_dir}/$1/target/{$1.jar,lib} comsadmin@${coms_addr}:${consumer_path}/${service_jar_name} 111 if [ $? -eq 0 ];then 112 echo "代码发布成功" 113 return 10 114 else 115 return 11 116 fi 117 } 118 119 function transfer_coms_bkend() { 120 bkend_path="path" 121 scp -r ${work_dir}/$1/target/{$1.jar,lib} apiadmin@${api_addr}:${bkend_path} 122 if [ $? -eq 0 ];then 123 echo "代码发布成功" 124 return 10 125 else 126 return 11 127 fi 128 } 129 130 function restart_coms() { 131 ssh comsadmin@${coms_addr} '/home/comsadmin/service.sh $1' 132 } 133 134 while true 135 do 136 help_usage 137 declare -A dict 138 dict=([1]="包名1" [2]="包名2" [3]="包名3" [4]="包名4" [5]="包名5") 139 consumer_64=(包名1 包名2 包名3) 140 service_64=(包名4 包名5) 141 read -p "请输入需要更新的应用名称前面的ID号>:" program_id 142 count=0 143 for key in $(echo ${!dict[*]}) 144 do 145 if [ "${program_id}" -eq $key ];then 146 program_name=`echo ${dict[$key]}` 147 if [[ "${consumer_64[@]}" =~ ${program_name} ]];then 148 echo "开始更新${program_name}项目" 149 if [ $count -eq 0 ];then 150 pack_common 151 fi 152 pack_service ${program_name} 153 sleep 2 154 echo "开始${program_name}发布代码" 155 transfer_coms_consumer ${program_name} 156 if [ $? -eq 10 ];then 157 echo "代码更新完成,即将重启" 158 restart_coms ${program_name} 159 else 160 echo "代码更新失败,请检查原因" 161 fi 162 let count+=1 163 elif [[ "${service_64[@]}" =~ ${program_name} ]];then 164 echo "开始更新${program_name}项目" 165 if [ $count -eq 0 ];then 166 pack_common 167 fi 168 pack_service ${program_name} 169 transfer_coms_service ${program_name} 170 if [ $? -eq 10 ];then 171 echo "代码更新完成,等待重启" 172 restart_coms ${program_name} 173 else 174 echo "代码更新失败,请检查原因" 175 fi 176 let count+=1 177 else 178 echo "开始更新${program_name}项目" 179 if [ $count -eq 0 ];then 180 pack_common 181 fi 182 pack_service ${program_name} 183 transfer_coms_bkend ${program_name} 184 if [ $? -eq 10 ];then 185 echo "代码更新完成,等待重启" 186 ssh apiadmin@${api_addr} '/home/apiadmin/coms/consumer/coms-consumer-bkend/startBkend.sh' 187 else 188 echo "代码更新失败,请检查原因" 189 fi 190 let count+=1 191 fi 192 fi 193 done 194 done 195