这个shell脚本为线上代码部署的脚本,此脚本适用于小公司。而大公司会有专门的一套自动化部署的程序,比如使用jenkins部署,这个是比较常见的。
#!/bin/bash
#首先在code里面执行下面命令
#git checkout git@github.com:<username>/demo.git
CDATE=$(date "+%Y-%m-%d")
CTIME=$(date "+%Y-%m-%d-%H-%M")
#SHELL
CODE_DIR="/deploy/code/"
CONFIG_DIR="/deploy/config/"
TAR_DIR="/deploy/tar/"
TMP_DIR="/deploy/tmp/"
usage(){
echo $"usage $0 [deploy | rollback-list | rollback-pro version]"
}
#获取代码,并拷贝到临时目录下
git_pro(){
echo "begin git pull"
cd $CODE_DIR && git pull
API_VERL=$(git show | grep commit | cut -d" " -f2) #git show 为显示各种类型的对象
API_VER=$(echo ${API_VERL:0:6})
cp -a "$CODE_DIR" $TMP_DIR
}
#添加配置文件
config_pro(){
echo "add pro config"
/bin/cp "$CONFIG_DIR/*" $TMP_DIR/demo/
TAR_VER="${API_VER}"-"{$CTIME}"
cd $TMP_DIR && /bin/mv demo pro_demo_"$TAR_VER"
}
#打包代码
tar_pro(){
echo "tar pro"
cd $TMP_DIR && tar -czf pro_demo_"$TAR_VER".tar.gz pro_demo_"$TAR_VER"
}
#将打包好的代码上传到正式环境的tmp目录
scp_pro(){
/bin/cp $TMP_DIR/pro_demo_"$TAR_VER.tar.gz /tmp
}
#部署
deploy_pro(){
cd /tmp/ && tar -zxf pro_demo_"$TAR_VER".tar.gz
rm -f /var/www/html/demo
ln -s /tmp/pro_demo_"$TAR_VER" /var/www/html/demo
}
#测试
test_pro(){
echo 'test ok'
}
#回滚,列出所有打包好的代码
rollback_list(){
ls -l /tmp/*.tar.gz
}
#删除软连接,重新建立软连接
rollback_pro(){
rm -f /var/www/html/demo
ln -s /tmp/$1 /var/www/html/demo
}
#执行程序
main(){
case $1 in
deploy)
git_pro
config_pro
tar_pro
scp_pro
deploy_pro
test_pro
;;
rollback-list)
rollback_list
;;
rollback-pro)
rollback_pro $2
;;
*)
usage:
esac
}
main $1 $2
- 1