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

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

  1.  获取代码
  2.  打包代码
  3.  传输代码
  4.  关闭应用
  5.  解压文件
  6.  放置文件(备份老文件,放置新的文件)
  7.  开启应用
  8.  最后检查下

OK,先这么来。。。

[一] 第一次尝试

  获取代码

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

  打包代码

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

传输代码

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

关闭nginx应用

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

关闭django应用

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

解压文件

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

放置文件

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

开启应用

开启django应用

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

开启nginx应用

  1. /data/server/nginx/sbin/nginx

 检查一下

  1. netstat -tnulp | grep ':80'

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

 [二] 第二次尝试

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

  1. #!/bin/bash
  2. # 功能:打包代码
  3. # 名称:deploy.sh
  4. # 作者:枫客浪人
  5. # 版本:0.2
  6. # 联系方式:xxxxxxx
  7.  
  8. # 打包代码
  9. tar_code(){
  10. echo "打包代码"
  11. ssh root@192.168.56.12 "/bin/bash /data/scripts/code_tar.sh"
  12. }
  13. # 传输代码
  14. scp_code(){
  15. echo "传输代码"
  16. cd /data/codes/
  17. [ -f django.tar.gz ] && rm -f django.tar.gz
  18. [ -d django ] && rm -rf django
  19. scp root@192.168.56.12:/data/code/django.tar.gz ./
  20. }
  21. # 关闭应用
  22. serv_stop(){
  23. echo "关闭nginx应用"
  24. /data/server/nginx/sbin/nginx -s stop
  25. echo "关闭django应用"
  26. django_pid=$(lsof -Pti :8000)
  27. kill "${django_pid}"
  28. }
  29. # 解压代码
  30. untar_code(){
  31. echo "解压代码"
  32. cd /data/codes/
  33. tar xf django.tar.gz
  34. }
  35. # 放置代码
  36. fangzhi_code(){
  37. echo "备份原文件"
  38. B_TIME=$(date +%Y%m%d%H%M%S)
  39. mv /data/server/itcast/test1/views.py /data/backup/views.py-"${B_TIME}"
  40. echo "放置新文件"
  41. mv /data/codes/django/views.py /data/server/itcast/test1/
  42. }
  43. # 开启应用
  44. serv_star(){
  45. echo "开启django应用"
  46. source /data/virtual/venv/bin/activate
  47. cd /data/server/itcast/
  48. python manage.py runserver >>/dev/null 2>&1 &
  49. deactivate
  50. echo "开启nginx应用"
  51. /data/server/nginx/sbin/nginx
  52. }
  53. # 检查
  54. check(){
  55. echo "检查部署效果"
  56. netstat -tnulp | grep ':80'
  57. }
  58. main(){
  59. tar_code
  60. scp_code
  61. serv_stop
  62. untar_code
  63. fangzhi_code
  64. serv_star
  65. check
  66. }
  67. main

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

三] 第三次尝试

  1. #!/bin/bash
  2. # 功能:打包代码
  3. # 名称:deploy.sh
  4. # 作者:枫客浪人
  5. # 版本:0.3
  6. # 联系方式:xxxxxxx
  7. # 日志功能
  8. write_log(){
  9. LOG_DATE=`date +%F`
  10. LOG_TIME=`date +%T`
  11. buzhou="$1"
  12. echo " ${LOG_DATE} ${LOG_TIME} $0${buzhou}" >> /data/logs/deploy.log
  13. }
  14. # 打包代码
  15. tar_code(){
  16. echo "打包代码"
  17. ssh root@192.168.56.12 "/bin/bash /data/scripts/code_tar.sh"
  18. write_log "打包代码"
  19. }
  20. # 传输代码
  21. scp_code(){
  22. echo "传输代码"
  23. cd /data/codes/
  24. [ -f django.tar.gz ] && rm -f django.tar.gz
  25. [ -d django ] && rm -rf django
  26. scp root@192.168.56.12:/data/code/django.tar.gz ./
  27. write_log "传输代码"
  28. }
  29. # 关闭应用
  30. serv_stop(){
  31. echo "关闭nginx应用"
  32. /data/server/nginx/sbin/nginx -s stop
  33. write_log "关闭nginx应用"
  34. echo "关闭django应用"
  35. django_pid=$(lsof -Pti :8000)
  36. kill "${django_pid}"
  37. write_log "关闭django应用"
  38. }
  39. # 解压代码
  40. untar_code(){
  41. echo "解压代码"
  42. cd /data/codes/
  43. tar xf django.tar.gz
  44. write_log "解压代码"
  45. }
  46. # 放置代码
  47. fangzhi_code(){
  48. echo "备份原文件"
  49. B_TIME=$(date +%Y%m%d%H%M%S)
  50. mv /data/server/itcast/test1/views.py /data/backup/views.py-"${B_TIME}"
  51. write_log "备份原文件"
  52.  
  53. echo "放置新文件"
  54. mv /data/codes/django/views.py /data/server/itcast/test1/
  55. write_log "放置新文件"
  56. }
  57. # 开启应用
  58. serv_star(){
  59. echo "开启django应用"
  60. source /data/virtual/venv/bin/activate
  61. cd /data/server/itcast/
  62. python manage.py runserver >>/dev/null 2>&1 &
  63. deactivate
  64. write_log "开启django应用"
  65.  
  66. echo "开启nginx应用"
  67. /data/server/nginx/sbin/nginx
  68. write_log "开启nginx应用"
  69. }
  70. # 检查
  71. check(){
  72. echo "检查部署效果"
  73. netstat -tnulp | grep ':80'
  74. write_log "检查部署效果"
  75. }
  76. main(){
  77. tar_code
  78. scp_code
  79. serv_stop
  80. untar_code
  81. fangzhi_code
  82. serv_star
  83. check
  84. }
  85. 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. 分享两个提高效率的AndroidStudio小技巧

    这次分享两个 Android Studio 的小技巧,能够有效提高效率和减少犯错,尤其是在团队协作开发中. Getter 模板修改--自动处理 null 判断 格式化代码自动整理方法位置--广度 or ...

  2. python scrapy框架爬虫遇到301

    1.什么是状态码301 301 Moved Permanently(永久重定向) 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一.如果可能,拥有链接编 ...

  3. JavaScript(第八天)【时间与日期】

    ECMAScript提供了Date类型来处理时间和日期.Date类型内置一系列获取和设置日期时间信息的方法. 一.Date类型 ECMAScript中的Date类型是在早期Java中java.util ...

  4. Alpha阶段报告-hywteam

    一.Alpha版本测试报告 1. 在测试过程中总共发现了多少Bug?每个类别的Bug分别为多少个? BUG名 修复的BUG 不能重现的BUG 非BUG 没能力修复的BUG 下个版本修复 文件路径的表示 ...

  5. 敏捷冲刺每日报告三(Java-Team)

    第三天报告(10.27  周五) 团队:Java-Team 成员: 章辉宇(284) 吴政楠(286) 陈阳(PM:288) 韩华颂(142) 胡志权(143) github地址:https://gi ...

  6. bzoj千题计划276:bzoj4515: [Sdoi2016]游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=4515 把lca带进式子,得到新的式子 然后就是 维护树上一次函数取min 一个调了一下午的错误: 当 ...

  7. C# 使用 GDI+ 画图

    最近做一个微信公众号服务,有一些简单的图片处理功能.主要就是用户在页面操作,前端做一些立刻显示的效果,然后提交保存时后端真正修改原图. 我们的后端是 ASP.NET,也就是 C# 语言了,C# 本身处 ...

  8. kubernetes入门(07)kubernetes的核心概念(4)

    一.pod 二.Volume volume可以为容器提供持久化存储,比如 三.私有镜像 在使用私有镜像时,需要创建一个docker registry secret,并在容器中引用.创建docker r ...

  9. C# 解析json数据出现---锘縖

    解析json数据的时候出现 - 锘縖,不知道是不是乱码,反正我是不认识这俩字.后来发现是json的 '[' 字符转换的 网上搜了一下,说的是字符集不匹配,把字符集改为GB2312. 一.贴下处理jso ...

  10. LinkedHashMap就这么简单【源码剖析】

    前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合以及散列表.Map集合.红黑树还有HashMap基础了: Collection总览 List集合就这么简单[ ...