代码托管到gtihub,开发人员进行本地修改push到仓库后,这里使用pull在web服务器上定期拉去代码至开发开发服务器

more code_sync_template.sh

#!/bin/sh
update_dir=”/home/demo/“ #every time upload code main dir
webroot=”/var/www/template”

#bak_dir=”/codedata/bak/deploy” #backup file main dir
gibin=”/usr/bin/git” #git bin path
rsync_bin=”/usr/bin/rsync” #rsync path

#这个变量定义的是代码拉取到本地之后同步到web目录时过排除一些特定的文件

#rsync_exclude=”.svn|.gz|.cache|.txt|.git|_tmp|temp|pma|dsn.php|gem*|global_config.php

Name=”template”
LOG=”/var/log/code_sync_template.log”
TIME=`date +%F\ %T`
OLD_IFS=”$IFS” #backup IFS
COMMAND=”sed -n ‘/$TIME start/,\$p’ $LOG > /tmp/template.log”

#get gitos code to local
pull_code()
{
if [ -d $update_dir/$Name ];then

if cd $update_dir/$Name && $gibin pull git@这里是你的代码仓库地址 &>>

$LOG ;then
echo -e “\033[32m `date` git pull code success \033[m”
else
echo -e “\033[31m `date` git pull code error \033[m” && exit 1
fi
else
echo -e “\033[32m Clone code to local. \033[m”
cd $update_dir && $gibin clone git@这里是你的代码仓库地址
fi
}

#sync local code to webroot

#定义的是将最新拉取到的代码同步到web目录
sync_code()
{

#$rsync_bin -uavz $update_dir/$Name $webroot/$Name
if [ “$rsync_exclude” ];then
IFS=”|”
exclude_arr=($rsync_exclude)
for e_arr in ${exclude_arr[@]};do
echo $e_arr >>/tmp/code_exclude_list
done
$rsync_bin -avz –exclude-from=”/tmp/code_exclude_list” $update_dir/$Name/ $webr
oot/
else
$rsync_bin -avz $update_dir/$Name/
$webroot/
fi
IFS=”$OLD_IFS”
}

Notice(){

#这个是通过一个eval命令来执行一段命令,这个命令描述的是从上次脚本执行记录日志后开始到最后的日志信息

eval $COMMAND

#这里是在过滤此次同步是记录的日志中pull有没有文件更新

grep -E “files changed|Fast-forward” /tmp/template.log
if [ $? -eq 0 ];then

    #这里使用一个python脚本来获取pull时更新了的具体文件有哪些,然后将内容通过邮件发送到指定邮箱
python /home/demo/mail-template.py   

else
exit 5
fi
}

echo ‘ ‘ >> $LOG
echo -e “\033[42;37m ############ Template $TIME start ############ \033[m” >> $LOG
echo -e “\033[47;30m Template Pull remote code to local. \033[0m” >> $LOG
echo -e “\033[47;30m Template Pull remote code to local. \033[0m”
pull_code >> $LOG
echo -e “\033[47;30m Template Sync local code to wwwroot.\033[0m” >> $LOG
echo -e “\033[47;30m Template Sync local code to wwwroot.\033[0m”
sync_code >> $LOG
echo -e “\033[46;37m ############ Template $TIME end ############ \033[m” >> $LOG
echo ‘ ‘ >> $LOG
Notice

邮件通知脚本,能够在自定义的时间周期内获取到最新代码时 能发送邮件到指定的邮箱,能够自动提醒管理人员知悉这一动作。

#!/usr/bin/env python

#-*- coding: UTF-8 -*-
import smtplib
import os,sys
from email.mime.text import MIMEText

mailto_list=['guomaoqiu@gmail.com‘]
mail_host=’smtp.qq.com’
mail_port=’25’
mail_user=’2399447849’
mail_pass=’xxxxxx’
mail_postfix=’qq.com’

filename = “/tmp/template.log”

fo = open(filename,”rb”)
filecon = fo.read();
str1 = “

{0}
“.format(filecon)

def send_mail(to_list,sub,content):
me=”Code Sync Notice【Template】”+”<”+mail_user+”@”+mail_postfix+”>”
msg = MIMEText(content,_subtype=’html’,_charset=’utt-8’)
msg[‘Subject’] = sub
msg[‘From’]=me
msg[‘to’]=”;”.join(to_list)
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me,to_list,msg.as_string())
s.close()
return True
except Exception, e:
print str(e)
return False
if __name__==’__main__‘:
if send_mail(mailto_list,”New Files Are Added”,str1):
print “发送成功”
else:
print “发送失败”