shell编程-项目部署(二)

上节我们讲了项目部署的准备工作,现在具体讲下代码部署

首先梳理下思路,大致是这样: 

 获取代码
 打包代码
 传输代码
 关闭应用
 解压文件
 放置文件(备份老文件,放置新的文件)
 开启应用
 最后检查下

OK,先这么来。。。

[一] 第一次尝试

  获取代码

cd /data/code/django/
sed -i 's#1.0#1.1#' /data/code/django/views.py

  打包代码

cd /data/code
tar zcf django.tar.gz django

传输代码

scp root@192.168.56.12:/data/code/django.tar.gz ./ # 12是代码仓库服务器

关闭nginx应用

/data/server/nginx/sbin/nginx -s stop

关闭django应用

lsof -Pti :8000  #获取端口对应的pid号
kill xxx   #关闭进程

解压文件

cd /data/codes/
tar xf django.tar.gz

放置文件

mv /data/server/itcast/test1/views.py /data/backup/views.py-`date +%Y%m%d%H%M%S`    # 这里我们给备份的文件加个时间戳

mv /data/codes/django/views.py  /data/server/itcast/test1/  #放置新文件

开启应用

开启django应用

python manage.py runserver >>/dev/null 2>&1 &
                deactivate

开启nginx应用

/data/server/nginx/sbin/nginx

 检查一下

netstat -tnulp | grep ':80'

这样是没问题的,但是还是麻烦。。

 [二] 第二次尝试

 创建一个shell脚本,名字就叫deploy.sh 吧

 #!/bin/bash
        # 功能:打包代码
        # 名称:deploy.sh
        # 作者:枫客浪人
        # 版本:0.2
        # 联系方式:xxxxxxx
            
        # 打包代码
        tar_code(){
            echo "打包代码"
            ssh root@192.168.56.12 "/bin/bash /data/scripts/code_tar.sh"
        }
        # 传输代码
        scp_code(){
            echo "传输代码"
            cd /data/codes/
            [ -f django.tar.gz ] && rm -f django.tar.gz
            [ -d django ] && rm -rf django
            scp root@192.168.56.12:/data/code/django.tar.gz ./
        }
        # 关闭应用
        serv_stop(){
            echo "关闭nginx应用"
            /data/server/nginx/sbin/nginx -s stop
            echo "关闭django应用"
            django_pid=$(lsof -Pti :8000)
            kill "${django_pid}"
        }
        # 解压代码
        untar_code(){
            echo "解压代码"
            cd /data/codes/
            tar xf django.tar.gz
        }
        # 放置代码
        fangzhi_code(){
            echo "备份原文件"
            B_TIME=$(date +%Y%m%d%H%M%S)
            mv /data/server/itcast/test1/views.py /data/backup/views.py-"${B_TIME}"
            echo "放置新文件"
            mv /data/codes/django/views.py  /data/server/itcast/test1/
        }
        # 开启应用
        serv_star(){
            echo "开启django应用"
            source /data/virtual/venv/bin/activate
            cd /data/server/itcast/    
            python manage.py runserver >>/dev/null 2>&1 &
            deactivate    
            echo "开启nginx应用"
            /data/server/nginx/sbin/nginx
        }
        # 检查
        check(){
            echo "检查部署效果"
            netstat -tnulp | grep ':80'
        }
        main(){
            tar_code
            scp_code
            serv_stop
            untar_code
            fangzhi_code
            serv_star
            check
        }
        main

这样就方便多了吧,哈哈。。。要是能有个日志的功能该多好啊,出了问题就可以很方便的定位BUG了,可以增加一个日志的功能

三] 第三次尝试

 #!/bin/bash
        # 功能:打包代码
        # 名称:deploy.sh
        # 作者:枫客浪人
        # 版本:0.3
        # 联系方式:xxxxxxx
        # 日志功能
        write_log(){
            LOG_DATE=`date +%F`
            LOG_TIME=`date +%T`
            buzhou="$1"
            echo " ${LOG_DATE}  ${LOG_TIME}    $0${buzhou}" >> /data/logs/deploy.log
        }
        # 打包代码
        tar_code(){
            echo "打包代码"
            ssh root@192.168.56.12 "/bin/bash /data/scripts/code_tar.sh"
            write_log "打包代码"
        }
        # 传输代码
        scp_code(){
            echo "传输代码"
            cd /data/codes/
            [ -f django.tar.gz ] && rm -f django.tar.gz
            [ -d django ] && rm -rf django
            scp root@192.168.56.12:/data/code/django.tar.gz ./
            write_log "传输代码"
        }
        # 关闭应用
        serv_stop(){
            echo "关闭nginx应用"
            /data/server/nginx/sbin/nginx -s stop
            write_log "关闭nginx应用"
            echo "关闭django应用"
            django_pid=$(lsof -Pti :8000)
            kill "${django_pid}"
            write_log "关闭django应用"
        }
        # 解压代码
        untar_code(){
            echo "解压代码"
            cd /data/codes/
            tar xf django.tar.gz
            write_log "解压代码"
        }
        # 放置代码
        fangzhi_code(){
            echo "备份原文件"
            B_TIME=$(date +%Y%m%d%H%M%S)
            mv /data/server/itcast/test1/views.py /data/backup/views.py-"${B_TIME}"
            write_log "备份原文件"
            
            echo "放置新文件"
            mv /data/codes/django/views.py  /data/server/itcast/test1/
            write_log "放置新文件"
        }
        # 开启应用
        serv_star(){
            echo "开启django应用"
            source /data/virtual/venv/bin/activate
            cd /data/server/itcast/    
            python manage.py runserver >>/dev/null 2>&1 &
            deactivate
            write_log "开启django应用"
            
            echo "开启nginx应用"
            /data/server/nginx/sbin/nginx
            write_log "开启nginx应用"
        }
        # 检查
        check(){
            echo "检查部署效果"
            netstat -tnulp | grep ':80'
            write_log "检查部署效果"
        }
        main(){
            tar_code
            scp_code
            serv_stop
            untar_code
            fangzhi_code
            serv_star
            check
        }
        main

搞定。收工

  

原文地址:https://www.cnblogs.com/syketw23/p/7671014.html