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

    搞定。收工

      

  • 相关阅读:
    Eclipse 导入项目乱码问题(中文乱码)
    sql中视图视图的作用
    Java基础-super关键字与this关键字
    Android LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)的参数理解
    Android View和ViewGroup
    工厂方法模式(java 设计模式)
    设计模式(java) 单例模式 单例类
    eclipse乱码解决方法
    No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方案
    【转】使用 Eclipse 调试 Java 程序的 10 个技巧
  • 原文地址:https://www.cnblogs.com/syketw23/p/7671014.html
Copyright © 2011-2022 走看看