设为首页 收藏本站
查看: 756|回复: 0

使用shell实现代码自动发布

[复制链接]

尚未签到

发表于 2018-8-21 07:13:03 | 显示全部楼层 |阅读模式
#!/bin/bash  
#Usage: watch_file absolute_dirname
  
#Author: zhangchunyang Date: 2017/01/05 17:00
  
#Auto online
  

  
path="$1"
  
script_dir="/home/zhangchunyang/ansible_stage/roles/online/tasks"
  
var_dir="/home/online_2"
  
tmpfile="/tmp/contrast"
  

  
#control platform
  
declare -a platform=("xxx1" "xxx2" "xxx3" "xxx4" "xxx5" "xxx6" "xxx7" "xxx8" "xxx9" "xxx10.11000" "xxx11.11100")
  

  

  

  
execute (){
  sleep 15
  cd $1
  ansible-playbook $2.yml -e "hosts=$3_2" -f 6 &>> /tmp/online.log_$(date +%Y%m%d)
  #echo "ansible-playbook $2yml -e "hosts=$3_2""
  
}
  

  
goods_center_restart() {
  sleep 15;
  cd $1
  ansible-playbook $2.yml -e "hosts=$3_2" -t stop -f 6 &>> /tmp/online.log_$(date +%Y%m%d)
  ansible-playbook $2.yml -e "hosts=$3_2" -t start -f 6 &>> /tmp/online.log_$(date +%Y%m%d)
  #echo "ansible-playbook $2.yml -e "hosts=$3_2 -t stop""
  
}
  

  
mail_x() {
  echo -e "$1 online is success! \n \n $(tail -1 /tmp/online.log_$(date +%Y%m%d))" | mail -s 'Gray online status' 1064187464@qq.com
  
}
  

  

  
inotifywait -mq --timefmt '%d/%m/%y/%H:%M' --format '%T %w %e %f' -e ATTRIB $path | \
  
while read date watchdir event watchfile
  
do
  
        logfile="/tmp/online.log_$(date +%Y%m%d)"
  #judge file is not hidden file or buffer file
  [[ $watchfile =~ ^\. ]] && continue || echo "$watchfile is not buffer file or hidden file. next choice:''" &>> $logfile
  #echo $date $event  $watchdir $watchfile
  

  #judge file endswith zip or war
  endswith=$(echo $watchfile | awk -F"." '{printf ".%s\n",$NF}')
  if [ "$endswith" != ".zip" -a "$endswith" != ".war" ];then
  echo "$watchfile endswith isn't war or zip! " &>> $logfile
  continue
  else
  echo "$watchfile endswith is zip or war. " &>> $logfile
  fi
  #[[ $watchfile =~ \.[war,zip]$ ]] || echo "$watchfile endswith isn't war or zip! " &>> $logfile
  #[[ $watchfile =~ \.[war,zip]$ ]] && echo "$watchfile endswith is zip or war. " &>> $logfile || continue
  

  #next
  [ -e $tmpfile ] || touch $tmpfile
  olditem=$(grep $watchfile $tmpfile | awk -F":" '$1~/^'"$watchfile"'$/{printf "%s:%s\n",$1,$2}')
  md5=$(md5sum $var_dir/$watchfile | cut -d" " -f1)
  newitem="${watchfile}:$md5"
  for item in $(cat $tmpfile)
  do
  if [ -z $(echo $item | cut -d":" -f2) ];then
  sed -i "/$item/d" $tmpfile
  fi
  done
  if [ -z $olditem ];then
  echo "${watchfile}:$RANDOM" >> $tmpfile
  touch $var_dir/$watchfile
  elif [ $(echo $olditem | cut -d":" -f2) == "$md5" ];then
  echo "$watchfile is already online. Don't need online any more!" &>> /tmp/online.log_$(date +%Y%m%d)
  else
  sed -i "s/$olditem/$newitem/g" $tmpfile
  echo "Start: $date  -->  $watchdir $event $watchfile" &>> /tmp/online.log_$(date +%Y%m%d)
  plat_name="$(echo $watchfile | cut -d"." -f 1)"
  port="$(echo $watchfile | cut -d"." -f 2)"
  if [ -n "$port" -a "$port" != "zip" -a "$port" != "war" ];then
  yml_name=${plat_name}.${port}
  elif [ "$plat_name" == "xxx3" -a "$port" == "zip" ];then
  yml_name=${plat_name}.${port}
  else
  yml_name=${plat_name}
  fi
  

  #echo "$yml_name $plat_name"
  

  if echo ${platform[@]} | grep -w "$plat_name" &> /dev/null;then
  if [ "$plat_name" == "${platform[3]}" ];then
  execute $script_dir $yml_name $plat_name
  goods_center_restart $script_dir $yml_name $plat_name
  mail_x $plat_name
  echo "End: $(date +%Y%m%d) --> $date $watchfile" &>> $logfile
  else
  execute $script_dir $yml_name $plat_name
  mail_x $plat_name
  echo "End: $date  -->  $watchfile" &>> $logfile
  fi
  else
  echo "No $plat_name.yml!"  &>> $logfile
  fi
  fi
  
done



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554422-1-1.html 上篇帖子: 常用shell命令参数(高级) 下篇帖子: Funny UNIX Shell Commands-fenghao.cn
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表