持续交付的先决条件有哪些

Z, ZLW 465

持续交付的先决条件有:1、持续集成;2、自动化测试;3、交付流水线;4、环境部署。这4个条件让软件的编译、测试与发布变得更快更频繁,保证了软件可以稳定、持续的保持在随时可以发布的状况,确保了持续交付的落地。

持续交付是指能够按需快速、安全且可持续地发布各种类型的更改。采取持续交付的团队能够随时(包括正常工作时间)以低风险方式发布软件和更改生产,而不影响用户。实现持续交付的先决条件有:

1、持续集成

将代码开发和集成按模块拆分成多个小阶段,每一阶段完成后都会进行集成,这在一定程度上减少了风险。 我们要求在代码提交时即触发编译。构建时会对整个应用的所有模块进行编译,并伴随单元测试以及代码质量分析。持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

2、自动化测试

互联网产品要求全回归测试要快,那么,如何在保证测试质量和测试覆盖率的前提下,有效锁定测试执行时间呢?首先,测试执行集群是很好的思路,通过并发机制提升执行效率,其次测试策略也是一个突破口。传统软件产品的测试策略,同时采用金字塔模型,这是迈克·科恩提出的,在很长一段时间内都被认为是测试策略设计的优异实践。

但是,互联网产品具有快速迭代,微服务架构重后端等特性,我们应当遵循“重量级API测试,轻量级GUI测试,轻量级单元测试”的原则。以中间层的 API 测试为重点做全面的测试,尽可能提升自动化比率;轻量级的 GUI 测试,只覆盖最核心直接影响主营业务流程的;最上层的 GUI 测试通常利用探索式测试思维,以人工测试的方式发现尽可能多的潜在问题;单元测试采用“分而治之”,主攻稳定且核心业务。

3、交付流水线

交付流水线包括了从开发提交代码,触发构建,部署测试环境,测试环境自动化以及测试、准生产环境部署到测试、上线审批、自动化发布上线及测试。流水线也不是一味追求自动化,需要自动和人工的结合。

4、环境部署

利用容器化的快速部署优势实现流水线快速推进;利用容器化高可扩展性的优势实现基于负载的自动伸缩;利用容器化更加轻量级的优势解决了应用和操作系统的强耦合问题;利于容器化高一致性的优势统一构建各环境,提高部署环境的一致性

那么,为了持续交付,组织应该做好哪些准备呢?

交付团队而非部门

根据康威定律“设计系统的组织,其产生的设计和架构等价于组织间的沟通结构”

由于存在部门墙的存在,导致开发,测试,运维之间的大量沟通成本,严重影响效率。甚至严重时部门和部门之间甚至会非常容易起冲突。

开发人员只管完成既定的功能缺乏系统整体性思考;测试人员根据需求文档完成测试用例,但是却不思考需求本身的合理性;运维人员则缺少对软件架构本身的理解。各个部门看似各司其职进井有条,但是却很难对软件交付的效率和质量做出太多实质性的贡献。正如开篇所述,

而通过“交付团队”从项目一开始让所有项目成员能够参与到软件的交付过程中,确保各个角色的人员能够频繁的进行交流,并且为了一致的目标而共同努力,这也是DevOps运动核心价值

而相同角色之间的沟通交流通过社团COP的形式来进行领域知识的交流和提升是一个不错的方式

充分授权团队

确保持续交付实践的成功,赋能团队,授权团队也是整个组织应该思考的问题。在持续交付中我们知道一个团队是一个应该是以做产品而非做项目为目标,需要充分授权团队,使得团队能够完成从需求,开发,测试,上线的端到端过程。

当然在实际情况中,组织会有更多的因素需要考虑,比如最典型的场景比如由于落后的基础设施管理方式导致运维团队往往是被动的响应研发团队的需求,并且存在大量手动的操作环节导致时间和资源的浪费

平台化,服务化

  • 公有云,私有云,容器云

通过组织级别引入虚拟化或者容器化技术以及相应的管理平台如OpenStack,Rancher,Ks8等工具可以大大减少Ops团队的运维团队,在过去需要大量手工操作的过程都可以通过虚拟化平台或者容器化平台完成,研发团队或者资源的周期从之前的几天缩短到几分钟。

  • 基础设施自服务

同时对于Ops团队则专注于提供底层的基础设施资源,包括网络,安全等相关管理。并将相关的资源以服务的形式暴露给团队,各个产品团队管理自己的基础设施环境,维护持续部署流水线,以及软件运行环境的变更

  • 平台化服务

同时对于企业和组织而言通过引入统一的平台化服务,可以完成对所有产品团队的统一管理,和监控。这些关键的平台化服务可能包括:统一的日志管理平台,持续交付平台,以及监控和运营平台等。

拓展阅读

持续交付的好处

  • 减少部署的风险 :由于部署的制品变更很少,出错的可能性也小,如果出错也很容易修复。
  • 进度可靠:许多人以工作完成情况来过跟踪进度。如果“完成”只是开发口头上说的完成,这并不比软件可以被部署到生产环境可行。
  • 用户反馈 :软件开发最大的风险是开发的东西不满足客户要求。越早可以让客户用到产品,就可以越早的听到有价值的反馈意见(通常需要使用ObservedRequirements)

什么是持续集成?

持续集成是一种DevOps 软件开发实践。 采用持续集成时,开发人员会定期将代码变更合并到一个中央存储库中,之后系统会自动运行构建和测试操作。 持续集成通常是指软件发布流程的构建或集成阶段,需要用到自动化组件(例如CI 或构建服务)和文化组件(例如学习频繁地集成)。

推荐阅读:

6款适合中小企业开发的Devops工具 | 企业如何搭建私有云 | 企业级私有云三大落地方案

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部