大型系统持续迭代实践
概要
- 持续发布版本所面临的问题
- 版本快速迭代流程设计
- 集成部署环境构建
一、持续发布版本所面临的问题
产品迭代的过程
一般情况下产品迭代的过程分为一下几步:
编码=》构建=》集成=》测试=》交付=》部署,同学们看的好像很简单,但是当我们系统越来越大,功能模块越来越多的时候,使用传统的产品迭代方式,迭代周期就会越来越长,而且现在的网络公司都盛行敏捷开发,微服务架构。这种方式已经不适合现在使用了,为了解决这个问题大牛们分别提出了,持续集成、技术交互、技术部署的概念,经过大家的验证这是可行的方式,但同时也对团队的技能水平提出了很高的要求,所以到现在还没完全的运用起来,为了的软件开发会向这个方向走,现在我们认识一下什么是 持续集成、交互、部署的概念
持续集成
持续集成是指软件在研发部分功能模块后,需要和别的功能集成为一个完整的系统,我们传统的软件开发一般集成会在1-3天内,持续集成就是我每次提交代码系统都会帮我们集成起来,真因为集成更加频繁了可以帮助我们更快的发现问题和错误并修正。
持续交付
持续交付在持续集成的基础上,将集成后的代码部署到更加贴近运行环境的,预运行环境中。
持续部署
持续部署则是在持续交付的基础上,把部署到生产环境过程自动化
二、版本快速迭代流程设计
知识点:
- 整体流程设计
- 发布窗口机制
- 发布计划
- 实施计划
- 版本分支管理
1、整体流程设计
首先我们的程序员把代码写好后提交到git仓库里,jenkins就会自动的把项目部署到开发环境中,并且存档nexus中,或者可以通过拉取的方式去nexus拉取项目,当开发环境做的差不多了可以测试了,jenkins把项目复制到test版本仓库,测试人员就会用脚本去拉取最新的版本测试,测试完后会测试人员会把test仓库的版本复制到relese版本仓库中,然后测试人员再拉取加入预演环境,通过后运维就会去relese拉取更新到生产环境中。
2、发布窗口机制
上面的发布流程是不是感觉好复杂,我们不可能每天走一遍。可以设定一个固定发布时间,一般是设在周四。下午4点时候发布,如果这点还没来得及实现的测试的需求,则需要到下一个窗口才能发布。这样做的目的是为了让团队中每个人清晰有一个时间概念,知道什么时候该干什么事情,避免手忙脚乱随意发布上线。
3、发布计划
很多的时候我们迭代的需求之间是有依赖关系,还有需求的工作量也不一样,有的下个窗口就能完成,有的则需要更长时间,为此我们需要提前计划好下个窗口能上线的需求,避免A需求发布时,他依赖的B需求确不能发布的情况发送,或者中间随意添加需求,从而发布变得难以控制
通常我们会再周五前由产品经理与开发协商制定下个窗口期的发布计划表。包含一下内容: 需求说明 需求编号 应用系统 开发负责人 测试负责人 对应版本号
4、实施计划
有了发布计划 并不意味着我们就可以拿着计划更新上线了,到了发布时间计划的项目不一定能够如期实现,更重要的是发布计划中并不没有包含实施更新说明如:需要更新哪些SQL脚本哪些配置文件等。而这些都是测试人员在更新环境的时候所必要的。所以在发布之前需要开发人员填写一个部署说明文档其包含如下内容:
需求说明、需求编号、应用系统、依赖系统、项目文件、变更脚本、变更配置、开发负责人、测试负责人、版本编号、发布时间。
三、集成部署环境构建
知识点:
-
版本仓库选型
-
更新机制实现(更新脚本、jenkins配置)
- 项目更新
- 配置文件更新
- 版本回滚
- 适应不同环境(开发、测试、运维)
1、版本仓库选型
我在我们设计的整个流程当中版本仓库是非常重要的一项,他用于存储版本发布所需 程序包、更新脚本、更新配置。这里我们直接采用SVN实现。为什么不采用nexus 或git 呢?因为nexus 不能存储更新脚本和配置文件,而git对于测试人员和运维人员使用稍复杂,此外版本仓库只是单纯的存储,git的特性发挥不出来。
SVN服务安装
#yum 安装
yum install subversion
#查看svnserver版本
svnversion --version
创建SVN版本目录
mkdir -p /data/svn/repository
svnadmin create /data/svn/repository
SVN配置
#配置目录: /data/svn/repository/conf
#authz :目录权限设置
vim authz
#表示添加一个admin帐号,密码为 admin123
admin=admin123
passwd:用户与密码设置
vim passwd
#表示admin 拥有所有目录的读写权限
[/]
admin=rw
svnserve.conf :svn服务
vim svnserve.conf
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = /data/svn/repository
启动svn 服务
svnserve -d -r /var/svn/svnrepos
基于客户端访问svn
默认端口:3690
地址:svn://192.168.17.200:3690/
2、更新机制实现
~shell
svnserve -d -r /var/svn/svnrepos
基于客户端访问svn
~~~shell
默认端口:3690
地址:svn://192.168.17.200:3690/
2、更新机制实现
更新机制是指项目如何进行实质的更新,图中我们充计了两种方式:一种是自动推送,另外一种是手动拉取。前者用于开发环境、后者可以用于所有环境。