zoukankan      html  css  js  c++  java
  • 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

    搞定。收工

      

  • 相关阅读:
    Centos7网络配置(VMware)
    Djangoform表单Ajax控制跳转
    selenium Webdriver 处理iFrame之间的切换问题------------
    Eclipse相关的快捷键
    selenium webdriver----如何处理div弹窗、alert、confirm、prompt对话框-------------------
    处理basic认证,浏览器自带弹窗的(非windows弹窗)处理-----------------
    元素的Actions(特效)及基本UI控件操作
    查找页面元素一
    调用exe文件(一般处理登陆安全窗口)+睡眠等待(--------------------)
    用autoit识别windows窗口(保存弹窗及登陆(basic认证)相关的弹窗)-----
  • 原文地址:https://www.cnblogs.com/syketw23/p/7671014.html
Copyright © 2011-2022 走看看