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
搞定。收工