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

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

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

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

搞定。收工

  

shell编程-项目部署(二)的更多相关文章

  1. 7-1 shell编程基础之二

    shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...

  2. 利用shell编程,部署项目到服务器

    现在在前后端分离的开发形式中,每次前端将VUE项目打包之后,需要后端程序员部署到服务器上.这过程为何没有用git,因为每次vue打包后的文件都不相同与前一次打包,git为何的话,会包含过大迭代版本,同 ...

  3. SHELL编程笔记(二)之shell流程控制

    Shell控制流程结构 本章内容有:   退出状态   While.for和until loops循环   If then else语句   脚本中动作   菜单 条件控制语句 If then els ...

  4. linux shell编程学习笔记(二) --- grep命令

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  5. Shell 编程(实例二)

    创建一个脚本,为指定硬盘创建分区 1.列出当前系统所有磁盘,让用户选择,如果选择quit则退出脚本:如果选择错误,则重新选择 2.当用户选择完成后,询问是否继续 3.抹除选择磁盘上的分区,为其创建三个 ...

  6. shell编程题(二)

    计算1-100之和 #!/bin/bash `;do #符号不是单引号 是 1左边的符号 sum=$[$i + $sum ] done echo $sum #!/bin/bash i= n=1 #定义 ...

  7. Shell编程-项目部署(一)

    由于实际工作中经常用到需要部署项目,比较麻烦,今天记录下如何利用shell脚本完成自动部署的工作,毕竟不是专业的运维出身,写的不好,还请勿喷_^o^_ 今天以部署Django项目为演示,进行部署项目, ...

  8. shell编程(二)

    第三十二次课 shell编程(二) 目录 十五.shell中的函数 十六.shell中的数组 十七.告警系统需求分析 十八.告警系统主脚本 十九.告警系统配置文件 二十.告警系统监控项目 二十一.告警 ...

  9. (C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令

    原文(C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:( ...

随机推荐

  1. 仿京东树形菜单插件hovertree

    hovertree是一个仿京东的树形菜单jquery插件,暂时有银色和绿色两种. 官方网址:http://keleyi.com/jq/hovertree/欢迎下载使用 查看绿色效果:http://ke ...

  2. 【备忘】Idea的那些事

    说到Java的IDE,似乎eclipse和Idea是目前的主流.然而,OO的课程组却一直在推荐使用eclipse,于是很多人就这样错过了Idea这样强大的IDE工具.本文将会对于Idea和Idea的一 ...

  3. 基于 HTML5 Canvas 实现的文字动画特效

    前言 文字是网页中最基本的元素,一般我们在网页上都是展示的静态文字,但是就效果来说,还是比较枯燥的.文字淡入淡出的动画效果在项目中非常实用,如果有某些关键的文字,可以通过这种动态的效果来提醒用户阅读. ...

  4. React Native 轻松集成统计功能(iOS 篇)

    最近产品让我加上数据统计功能,刚好极光官方支持数据统计 支持了 React Native 版本 第一步 安装: 在你的项目路径下执行命令: npm install janalytics-react-n ...

  5. JavaScript(第三十天)【XPath】

    XPath是一种节点查找手段,对比之前使用标准DOM去查找XML中的节点方式,大大降低了查找难度,方便开发者使用.但是,DOM3级以前的标准并没有就XPath做出规范:直到DOM3在首次推荐到标准规范 ...

  6. Beta 第七天

    今天遇到的困难: 构造新适配器的时候出现了某些崩溃的问题 ListView监听器有部分的Bug 今天完成的任务: 陈甘霖:完成相机调用和图库功能,完成阿尔法项目遗留下来的位置调用问题,实现百度定位 蔡 ...

  7. C语言--第14.15周作业

    一. 7-3 将数组中的数逆序存放 1.代码 #include 2<stdio.h> int main() { int a[10]; int i, n, s; scanf("%d ...

  8. mysql基础篇 - 其他基本操作

    基础篇 - 其他基本操作         其他基本操作 一.实验简介 本节实验中我们将学习并实践数据库的其他基本操作:索引.视图,导入和导出,备份和恢复等. 这些概念对于数据库管理员而言都非常重要,请 ...

  9. 关于安装win7系统时出现0x0000007b电脑蓝屏代码的问题

    问题解析: 0X0000007B 这个错误网上都说是sata硬盘的什么引导模式的原因引起. 在网上查找了很久,大概引起错误的原因就是:sata和ide两种模式不同,前者可以装win7系统,后者是xp系 ...

  10. C++高效安全的运行时动态类型转换

    关键字:static_cast,dynamic_cast,fast_dynamic_cast,VS 2015. OS:Window 10. C++类之间类型转换有:static_cast.dynami ...