devops:改变思维,让一切更加高效

持续交付发布可靠软件的系统方法(部署流水线)第十章:应用程序的部

2018-11-25  本文已影响121人  潘晓华Michael

《持续交付发布可靠软件的系统方法》读书笔记

引言

发布到生产环境和部署到测试环境的差异应该被封装在一组配置文件中,遵循一样的部署过程。启动自动部署系统,将要部署的软件版本与环境名称告诉它,点击开始,后缀部署与发布使用相同的流程。
我们需要有一个列表,其中包含能够部署到每个环境的所有构建,并且只要通过点击就可以选择一个软件版本向某个环境进行自动部署。同时这种方式是对环境修改的唯一途径(包括对操作系统和第三方软件配置的修改)。

创建发布策略(文档)

随着项目的进行,这个策略文档也会改变

应用程序的部署与晋级

每次部署时都使用同样的方法,使用相同的流程向每个环境部署,包括生产环境。在首次向测试环境部署时就应该使用自动化部署。

首次部署

在第一个迭代里,选择一至两个具有高优先级但非常简单的用户故事或需求,让部署流水线的前几个阶段可以运行,且能够部署并展示一些成果。把它看作实现部署流水线的“抽水泵”
这个启动迭代结束后,应该已经完成了以下内容:

对发布过程进行建模并让构建晋级

在构建中重点注意以下内容

测试与发布流程

配置的晋级

除了二进制需要晋级,环境与应用程序的配置信息也需要晋级。但是并不是所有的配置都需要晋级,这就需要对配置信息进行晋级管理。

联合环境

SIT环境中更多的工作是部署每个应用程序的新版本,直到所有应用程序可以互相联通。

部署到试运行环境

项目开始时就需要计划以下事情:

部署回滚和零停机发布

制定回滚计划时,需要遵循两个原则:

通过重新部署历史版本进行回滚

优点:可预知时间内恢复,且风险较低;部署操作经过运行,而回滚频率低,所以回滚脚本更不稳定
缺点:部署需要时间,业务有中断;覆盖部署,难以查找问题原因;新版本运行时产生的数据丢失。

零停机部署

将用户从一个版本几乎瞬间转移到另一个版本,如果出问题,可以瞬间将用户转到碑的版本上。不同版本应用独立部署。

蓝绿部署

保留两个相同的生产环境版本,“蓝环境”、“绿环境”。
将新版本部署在“蓝环境”下,在蓝环境下测试完成后,将路由配置到蓝环境。如果出现问题,把路由器切回到绿环境上即可,此时蓝环境用于查找问题。

蓝绿部署要小心管理数据库。解决办法如下:

在切换之前暂时将应用程序变成只读状态一小段时间,将绿数据库复制一份,并恢复到蓝数据库中,执行迁移操作,再将用户切换到蓝系统。如果一切正常,再把应用程序切换到读写方式,如果出现问题,只要把它切回绿数据库就可以了。
如果问题出现时,应用程序中已经写入了一些数据到蓝系统,那么切回去之前需要将新记录迁回到绿数据库中
还可以找个办法让应用程序的新版本把数据库事务同时发向新旧两个数据库

如果只有一个生产环境,也可以使用蓝录部署。让应用程序两个副本一起运行在同一个环境中。

金丝雀发布

金丝雀发布:把应用程序的某个新版本部署到生产环境中的部署服务器中,从而快速得到反馈。

  1. 部署新版本到一部分服务器上,对新版本上做冒烟测试,容量测试。
  2. 选择一部分用户,把他们引到新版本上
  3. 还可以部署多个版本,将不同组用户引导到不同版本上

好处:

紧急修复

牢记:任何情况下,都不能破坏流程。紧急修复版本也需要走构建、部署、测试和发布流程。
让每个紧急修复都走完标准的部署流水线。
紧急修复的另一个做法是回滚到旧的好版本上。
处理生产环境的缺陷时应用考虑以下因素:

持续部署

使用部署流水线、让部署到生产也自动化。如果某次提交的代码通过了所有的自动化测试,就直接部署到生产环境中。
持续部署可以与金丝雀发布结合,先通过自动过程发布给一小部分用户,如果没有问题,就发布给所有用户。

小贴士

上一篇下一篇

猜你喜欢

热点阅读