自动化概述: 如何实施自动化部署

Posted kali-aotu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化概述: 如何实施自动化部署相关的知识,希望对你有一定的参考价值。

早期代码部署方式

1、手工用过rz或scp上传代码,实现代码部署(小公司、开发少、无运维)
2、通过手动ftp上传,然后再rsync同步到各服务器。
3、拥有代码管理svn/git,登录服务器svn checkout svn://xxxx 或svn pull部署
4、shell脚本只实现单一功能代码部署。
缺点:
1.全程运维参与,占用大量时间。
2.如果节点多,上线速度慢。
3.人为失误多,目录管理混乱。
4.回滚不及时,或者难以回退。

如何实施自动化部署概述

对于不同语言开发的代码,整个发布流程大致是相同的。但对于java代码,需要进行编译,代码部署完后需要重启tomcat等;整各部署流程大致一样。

自动化部署规划

1、首先必须有代码管理svn/git(推荐使用git);
2、多节点部署,需要将部署的节点逐一或部分下线后部署;
3、后端的web节点使用非80端口,负载均衡或代理服务器使用80端口;
4、清楚公司整个代码发布的详细流程;

需要实现的功能

1、不影响线上正常访问,保证7×24访问;
2、实现一键部署代码,达到秒级回滚,并可以回滚到指定版本;
3、自动测试,检测访问无问题,实现上线,否则自动回滚到上一个版本;
4、可多次部署回滚,并记录发布回滚次数;

自动化部署详细流程

1、代码存放url
svn/git 管理代码,保证所有代码以svn/git为最新版本;
2、获取最新代码
svn co svn://svn.xxx.com/deployment/项目名/trunk
git pull 获取最新分支代码
git tag 获取指定标签版本
git commit 获取指定版本号
3、测试环境、生产环境配置文件获取
同获取代码一样,但是生产配置文件一般单独存放
4、代码通过mvn 进行编译(可选),代码打包;
java的代码一般会进行mvn进行编译,打包后分发到需要部署代码的服务器
5、项目名称的设计
关于项目名称的设计,能够标识每次发版,标识发版时间,什么版本;
例如:pro_baidu.com_v1.0.1_20161111_181030   生产环境-项目名称-版本-发版时间
上面的例子需要能够通过svn/git获取,或直接指定等方式;
6、解压war包,删除旧版本的软链接、创建新版本的软链接
此步骤在自动化部署中很关键,有人使用备份代码文件夹、删除文件夹、再拷贝代码,其实是很慢的,使用软链接的方式基本可以达到无缝切换、不感知的地步。
7、重启tomcat。
java代码部署,是需要重启tomcat的,不能热部署。
8、测试
测试代码不是是否成功,可以再此步骤增减测试的脚本,进行多方位的测试,检测是否有大的bug
9、正式上线
到此步基本就完成了自动化部署。

大致的步骤图例(根据实际情况增减部署步骤)

技术分享图片

秒级回滚实现

    在代码部署过程中一旦出现问题,一定需要可以秒级回滚到上一个版本。将损失降低到最小。

回滚详细流程

    1、列出所有可回滚的版本;
       线上部署多次后。根据各自的需求,保留最近部署的10次或其他多次代码,以便后面回滚使用;
       或者能够快速从svn/git 拉取上一个版本的地方进行重新部署(时间较长);
    2、删除就软链接、创建新软链接
       前面使用的软链接,此处又能快速使用了,这样就可以快速回滚
    3、重启tomcat
    4、测试(主要就1/2/3步骤)
       测试的步骤,可根据实际情况进行增加;
    5、回滚成功,进行访问测试。<–测试工程师介入功能测试等

代码回滚大致的步骤图例(根据实际情况增减部署步骤)

技术分享图片
上面就是整个代码快速部署、回滚的大致思路。可以根据上面的思路实现公司的代码自动化部署。

总结

1、基本实现代码快速部署、回滚;
2、可以在部署中增加测试脚本,使用curl测试访问(由测试工程提供详细测试脚本);
3、使用shell、python来实现整个代码发布回滚,弱化流程;
4、考虑多种可能性,提供代码健壮性(例如多人执行脚本、异常报错退出、日志收集等)。
5、在知道整个详细流程后,也可以借助第三方工具:jenkins  来实现自动化部署


















































以上是关于自动化概述: 如何实施自动化部署的主要内容,如果未能解决你的问题,请参考以下文章

Ansible自动化运维管理工具的概述与部署

持续集成:jenkins2.0实施要点

ELK部署实施

自动化运维之Ansible概述及Ansible部署|(持续更新中)

[云原生专题-60]:Kubesphere云治理-DevOps-自动化开发与自动化上云部署流程概述

jenkins自动部署