一部Web应用自动化部署的进化史[AWS]
来源:互联网 发布:棋盘分割算法优缺点 编辑:程序博客网 时间:2024/05/21 10:45
前段时间,本人参与了某项目的从“零”开始的开发与运维。真的是从零开始啊……从项目设计到开发,再到发布、运维,说多了都是泪……还好现在有好多现成的工具可以使用,省了很多时间和精力。
此项目使用AWS,Web 端架构采用 ELB + AutoScalling group,数据库使用RDS,文件存储使用了S3。使用这个架构可以节省很多的运维时间和精力,可以拿更多的时间关注项目的开发。但是这个架构并不包括代码部署的方面,本文主要介绍在代码部署方面自动化运维道路上的各种进化。
项目主要软件环境: Java EE, Spring 4 MVC, maven, tomcat8, gitlab
项目分测试环境和生产环境,生产环境采用ELB+AutoScalling,测试环境只有一台服务器跑tomcat,虽然不是很严谨,但是在前期还是能省(qian)则省了……
在代码部署方面大体经历了以下几个阶段。
石器时代
最开始时在本地开发测试,然后idea 打包上传到服务器上,然后ssh 登陆服务器手动部署代码。每次代码部署都要执行n多操作和命令。有段时间网络不是很好,光上传war 包就耗费十几分钟,对耐心是一场很大的考验。实在受不了这种繁琐的操作时候开始了一步步简化操作。
服务器上部署war 时需要先停止tomcat,然后删除tomcat webapps 目录下ROOT.war 文件和ROOT 目录,然后移动新的ROOT.war 到webapps 下,最后启动tomcat 服务。首先对这个步骤写了个shell 脚本:
“石头锤子” deployWar.sh
此“石头锤子”能实现上述war包的部署步骤,并对当前部署的war包进行备份。
然后又出现一个问题,如果改动只有一个或几个文件,完整部署太麻烦,这时可以只上传改动的文件,然后部署就可以了。
“石头镰刀1” updateClasses.sh
tomcat 的class 文件更新后需要重启tomcat 才能生效,而静态文件如js、css 文件等直接覆盖即可。所以针对静态文件有:
“石头镰刀2” updateStatic.sh
“铁器时代”
“小铁铲” cpWarToS3.sh
“大铁锤” deployFromS3.sh
从文件名上就可以看出这两个脚本一个是用来将war 上传到S3,一个是从S3 下载war包并部署的。
“工业时代”
“烈火” gitlab +“鼓风” maven
gitlab 作为一款优秀的git server 系统,maven 作为一款最常用的包管理软件之一,各位前辈已经提供的了丰富的工具我们就得充分利用。在开发时使用git 做版本控制,gitlab 部署在AWS 上,开发只需要和gitlab 进行sync 即可。然后在服务器上使用mvn clean install 进行打包,并上传到S3上。
“小卡车” updateWarToS3.sh
可是……(哎……就怕有可是……)在部署生产环境时,每次都需要执行多个流程:
从ELB 中移除一台EC2 -> 等待connection draining -> 登陆该EC2 -> 执行deployFromS3.sh -> 等待tomcat启动起来 -> 添加该EC2 回ELB -> 等待监控状态检查到InService -> 下一台EC2……
在压力小的情况下执行该操作ELB 后端实例较少,部署几次之后我烦了,交给了另外一个人去部署,(嗯,以邻为壑的感觉挺爽~~)结果他部署了几次之后他也烦了,威胁说撂挑子不干了……无奈只好继续利用我大shell 铸造大杀器了……
“巨型铲车” deployIntoELBBackendInstance.sh
该脚本能实现自动将指定ELB 下的后端健康实例进行部署,最后会提示部署成功和部署失败的实例。
至此,整个部署流程在updateWarToS3.sh 之后只需要执行deployIntoELBBackendInstance.sh 就可以了。
手执“大铁锤”,开着“巨型铲车”,慵懒的日子~舒坦~~~
- 一部Web应用自动化部署的进化史[AWS]
- 一部Web应用自动化部署的进化史[AWS]-使用shell实现CodeDeploy
- 一部Web应用自动化部署的进化史[AWS]-使用shell实现CodeDeploy
- 基于AWS的自动化部署实践
- Web交互的进化史
- web网站的自动化部署
- AWS 经典的3层web app部署架构图
- AWS 经典的3层web app部署架构图
- 网秦通过AWS进行全球应用的快速部署
- 自动化部署服务shell脚本的应用
- 基于AWS云服务的Web应用架构
- 自动化部署服务——AWS CodeDeploy 快速入门
- Maven实现Web应用集成测试自动化 -- 部署自动化(WebTest Maven Plugin)
- 修改web应用的部署应用名称
- [AWS] 记录在AWS上部署WordPress遇到的问题
- Web系统自动化部署脚本
- Shell脚本-自动化部署WEB
- 自动化部署java web项目
- 安卓问题集锦
- Python学习之工具篇-在Ubuntu16.04下用Eclipse+PyDev配置Python开发环境
- 数据结构学习笔记8--n个元素进栈,共有多少种出栈顺序?
- 网页数据存储mysql数据库过程问题及解决
- C++笔记——引用&
- 一部Web应用自动化部署的进化史[AWS]
- Ubuntu16.04+opencv3.2.0+python 版本切换
- Understanding and Visualizing Convolutional Neural Networks
- 最小生成树的思维好题
- VMware-vSphere-5.1--------群集、HA、DRS、FT
- TI cc2541协议栈开发环境的搭建
- dijkstra队列优化链式前向星(C++、Java)
- windows下用navicat远程链接虚拟机Linux下MySQL数据库
- 两边空格的编程风格