前言
在中小企业如果需要实现代码的自动化部署,99%以上公司不会开发什么自动化部署回滚平台的,这个时候就需要运维人员通过shell+开源软件比如jenkins来实现代码的自动化部署以及回滚。这里分享下我使用shell写的一个php代码自动部署脚本。大神勿喷。
脚本适应环境:
1、操作系统:centos 6.5 64位
2、代码使用gitlab进行管理
3、代码每次上线和回滚通过tag控制
补充:如果需要在你的企业使用我的这种部署方式,还需要有相应环境规范以及git分支管理规范。
php环境部署脚本
使用脚本注意事项:
1、 发布机器需要能够解析web服务器主机名,并且配置ssh通信
2、 变量中的目录以及用户等信息需要自己创建,脚本没有做判断自己创建。我这里web服务器是使用ansible进行部署的,相关目录和用户都会自动创建。
3、代码的部署使用tag,回滚原则为回滚到上个tag版本,所以部署脚本本身没有备份代码。
4、如果需要过滤一些临时目录或者日志目录,可以在rsync推送代码的时候使用–exclude选项进行过滤,示例脚本中过滤了.git目录和config.php文件是不会部署的。
#!/bin/bash # 设置时间相关变量 CTIME=$(date "+%Y-%m-%d-%H-%M") # 项目名称,建议和gitlab仓库名称一致 project=test # 本地代码目录(gitlab拉取代码后存放目录) CODE_DIR=/data/gitlab/pro/$project/ # 远程主机 REMOTE_HOST="LNMP-01.fblinux.com LNMP-02.fblinux.com" # 远程主机代码目录 REMOTE_DIR=/data/www/fblinux/ # 远程主机用户 REMOTE_USER=root # 远程主机代码执行用户 CODE_USER=php # 上线日志 DEPKOY_LOG=/data/log/pro_log.log #脚本使用帮助 usage(){ echo $"Usage: $0 [deploy tag]" } #拉取代码 git_pro(){ if [ $# -lt 1 ];then echo "请传入tag" exit 1 fi echo "拉取代码" cd $CODE_DIR && git checkout master && git pull && git checkout $1 if [ $? != 0 ];then echo "拉取代码失败" exit 10 fi cd $CODE_DIR && git pull } #推送代码服务器 rsync_pro(){ for host in $REMOTE_HOST;do echo "推送代码到服务器$host" rsync -rPv -P --delete --exclude="config.php" --exclude=".git" $CODE_DIR -e 'ssh -p 22' $REMOTE_USER@$host:$REMOTE_DIR if [ $? != 0 ];then echo "推送代码失败" exit 10 fi echo "代码授权" ssh $REMOTE_USER@$host "chown -R $CODE_USER $REMOTE_DIR" if [ $? != 0 ];then echo "代码授权失败" exit 10 fi done } #记录日志 record_log(){ echo "$CTIME 主机:$REMOTE_HOST 项目:$project tag:$1" >> $DEPKOY_LOG } main(){ case $1 in deploy) git_pro $2; rsync_pro; record_log $2; ;; *) usage; esac } main $1 $2