概要:
- 在产品交付的每个阶段,需要设计好每个阶段的环境、人员配置和决策卡点。其中,在每个决策上,为了保证质量和进度,需要对技术的可实现性和功能的友好性进行充分思考,实现两者的互补。
- 持续交付是在持续集成的基础上进一步的扩展,即研发人员的集成代码如果成功通过单元测试后(变为Green Build),设置关卡依次部署到Test、Staging和Prod环境。
- DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
为什么需要持续交付
开发并交付一款APP,随着团队人数和产品功能的增多,产品的交付难度也更大。这篇文章从产品的角度来理解开发的持续交付,以及对DevOps的认识。
为什么说随着团队人数的增多,产品的交付难度也越大呢?严格来说,这句话想表达的本质是,产品在不同的阶段,应该让适当的人员参与进来,而不能为了赶项目进度,直接让下一阶段的人员提前参与到上一阶段,比如说在开发阶段直接让客服和运营参与进来了解系统,因为这会带来不必要的沟通成本。当然,有可能甲方会直接给压力,赶鸭子上架。但是作为产品团队,还是要勇于和甲方解释清楚过于求成的利弊。尝试站在对方的立场把利弊沟通清楚,相信甲方也是可以理解。
为什么随着产品功能的增多,产品的交付难度也更大呢?这个比较好理解,因为功能越多,产品框架和细节描述也就会越复杂。这在设计区块链相关产品时尤其如此。因为在设计一个功能时,可能涉及到前端、后端、区块链三端的通信。比如说,某个转账功能按照如此设计,前端首先需要与后端通信,获得确认标识返回后;前端再发起一笔交易到链上,等待链进行处理并抛出事件;然后后端再监听事件,前端对状态进行刷新到变化后才会更新。任何一个环节出现问题,都会导致转账功能失败。所以,这里就要思考这样的异步设计是否合理呢?是否有更加好的设计?是否可以从功能上添加触发操作和友好提示来缓解呢?
通过对以上两个问题的简单描述,这里可以得出一个结论:在产品交付的每个阶段,需要设计好每个阶段的环境、人员配置和决策卡点。其中,在每个决策上,为了保证质量和进度,需要对技术的可实现性和功能的友好性进行充分思考,实现两者的互补。
在产品交付流程中,一般存在四个环境,分别是:开发(Dev)、测试(Test)、预发布(Staging)和生产环境(Prod)。这四个环境对应了开发的四个阶段,构成了面向用户的交付流水线。每个环境配置了研发人员、测试人员、灰度测试用户、运维人员。举个例子,前不久的微信公众号的“付费阅读”功能,在研发和测试阶段完成后,微信选择一部分公众号平台主,给他们发送邀请测试,这一阶段就属于灰度测试阶段,即筛选一部分的用户进行测试。
之所以划分为这四个环境,目的是实现快速、高质量的交付。而为了实现这个目的,最重要的就是“专注”和“持续”。专注是说,研发可以专注于研发工作,测试可以专注于测试工作,运维专注于运维的工作,不能因为其中一方的工作而使得另一方需要停下来。而持续是说,整个交付动作是不断地向前递进。
对于一个小的初创团队来说,要真正地按照敏捷规则实现有价值的交付,必须要在项目早期就计划好这四个阶段和环境,然后逐步迭代并交付可行的版本给到客户。
有些团队可能存在这种情况,认为目前的团队规模小,所以为了实现快速交付,很快地完成了原型和UI/UX后,进行前端开发,可以在两个星期就发布一个仅有模拟数据的演示版本。对于客户来说,这个版本的价值其实不大,而且往往会因为后期开发后端功能时,因为技术实现难度大,或者需求设计不合理导致需求变更。
还有一种情况也需要避免,如果让客户参与到测试阶段的测试,也就是直接在测试环境上进行测试,也会带来更多的麻烦,这些麻烦消耗了巨大的开发时间和沟通成本,甚至引起客户对开发质量的怀疑。因为测试阶段本身由于环境的原因,不断地切换或更新版本,导致客户所认为的真实数据在频繁的版本切换过程中无法保持一致,而实际上,客户所认为的这部分数据本身就不应该在这个环境下进行测试。所以,这也是为什么有必要设置一个Staging环境,提供给用户进行测试。
所以,这里再次回到我们上面的那个结论,在产品开发初期,设计好每个阶段的环境、人员配置和决策卡点。
持续集成(Continuous Integration)
持续集成在软件开发中的意思就是一个研发人员与另一个研发人员编写的代码组合起来,放到同一个源库,然后在Dev环境进行构建(Build)和测试(Test),并反馈给研发的过程。这个过程在开发前期就开始实践,从而使得编码、集成和测试的效率更快,也确保应用按照预期的方向发展。
持续交付(Continuous Delivery)
持续交付是在持续集成的基础上进一步的扩展,即研发人员的集成代码如果成功通过单元测试后(变为Green Build),就可以部署到Test环境,提供给测试人员根据测试用例进行测试;测试通过后,可以继续部署到Staging环境进行用户接受度测试,这个时候,产品经理往往也会参与进来查看用户的反馈;最后,再手动或者自动化部署到Prod环境提供给实际用户使用。
DevOps
DevOps是单词“Development”和“Operations”的结合。“ DevOps是促进研发人员、测试人员与运维人员之间高效协作的文化。DevOps文化通常与持续交付紧密相关,因为它们都旨在增强这三种角色之间的协作,目的都是更快和更高效地构建、测试和发布软件。
根据维基百科的解释:
DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
由于DevOps旨在成为一种跨职能的工作模式,因此那些使用该方法学的人会使用不同的工具集,这些工具集称之为“工具链”。这些工具链可以纳入以下一个或多个类别:
- 编码–代码开发和审查,源代码管理工具,代码合并
- 构建–持续集成工具,构建状态
- 测试-连续测试工具,可提供有关业务风险的快速及时反馈
- 打包-工件存储库,应用程序预部署阶段
- 发布-变更管理,发布批准,发布自动化
- 配置–基础结构配置和管理,基础结构代码工具
- 监视-应用程序性能监视,最终用户体验
结论
本文介绍了为什么在产品开发和交付过程中,持续交付是非常重要的,持续交付如何分为四个阶段、以及环境和人员配置。最后介绍了持续集成和交付、以及DevOps的概念,以及它们之间的关系。