功能发布是未来,并且需要CI,CD和功能标志

今天让我们谈论软件开发的未来,以及从发布软件到发布功能的转变。 但是,为了谈论那个未来,让我们首先进行一次引起记忆的旅行。

预先连续的任何事情:一次发布软件就可以了

如果您在软件行业工作了足够长的时间,那么您会记住一些今天会违背信念的事情。 回顾20年,软件开发就这样。 一月份,该团队以需求和设计文档的形式接收其功能和功能分配。 至此,他们都回到了实施阶段的小隔间。 这个阶段将持续到八月。

在八月,每个人都匆匆忙忙完成功能开发。 完成了吧好吧,不,不完全是。 现在该是人们过去所谓的“合并聚会”了。 在这里,每个人都可以在几个月的时间内完成对代码所做的所有更改,并将所有更改一起放入某种Franken代码库中。

合并工作会持续数天或数周,而团队需要努力进行正确的变更组合。 经过一些努力,代码得以编译。 再过几天,它可能会运行。 最终,它完成了每个人期望进入测试阶段的工作。 在这一点上,团队宣布冻结代码数月,仅修复出现的缺陷。

一年后,该团队通过持续交付(CD)发行了此发行版,并准备进行补丁修补。

功能发布的兴起是过去和现在的故事

这幅画怎么了好吧,如果您今天向软件开发人员咨询,几乎所有内容。

  • 那是瀑布,现在每个人都敏捷。
  • 合并方听说过持续集成吗
  • 每年发布每季度,每周甚至每天尝试。

然后,问题是多方面的,并且涉及方法,哲学和工具方面的缺陷。 从那时起,我们已经走了很长一段路。 持续集成(CI)阻止了合并方的实践。 敏捷软件开发与良好的工具相结合,缩短了发布周期,使您更具竞争力。 使用微服务等技术可以更好地分离关注点。

所有这些都使我们朝着一个共同的目标迈进:以更高的自动化程度,更频繁的方式以及更低的风险交付软件。

但是,只要我们根据软件发行版对软件进行推理,那么我们只能走得那么远。 我们需要谈论功能发布。 而且,只有战略性地将持续集成,持续交付和功能标记的使用结合起来,才能实现功能发布的竞争优势。

什么是持续集成/h2>

要了解我的主张的论点,您需要首先了解所涉及的组件。 因此,让我们依次定义它们。

首先,什么是持续集成

嗯,CI最初是一个非常简单但功能强大的概念,用“如果有伤痛,那就做得更多”这句话可以很好地描述。 还记得我刚才提到的合并方吗聪明的人来了,建议您通过更频繁地集成代码来避免这种情况。 尝试每月进行一次。 好的,现在每周一次。 让我们连续拍摄。

因此,按照最初的构想,CI实际上只是一种解决方案和实践:尽可能频繁地将代码集成到源代码管理中。

然而,从最初的谦逊开始,该概念在实践和工具方面都得到了显着发展。

  • 大多数团队每天至少一次将代码合并到主分支中。
  • 在每次这样的提交之后,团队在构建机器上运行一套自动化的测试和检查。
  • 构建中的任何故障都将成为立即解决的优先事项。

由于我们在软件开发行业中喜欢自动化,因此出现了一个工具生态系统,以帮助这些流程和实践自动化,同时通过良好的实践和效率来提供帮助。

因此,今天,CI不仅意味着持续集成的实践,还包括实现该集成的技术。

什么是连续交付/h2>

这种自动化的想法使我们紧接连续交付部署(CD)。 现在,我们正在CI之上构建,这是一个更容易解释的概念。

假设每当开发人员提交一些代码时,提交都会进入服务器。 服务器触发代码的构建,在其上运行一堆测试,然后通常将其打包。

这使事情几乎处于实际可部署状态,不是吗那么,为什么不再稍微增加一点距离并将其打包为实际可部署的状态呢然后为什么不采用该软件包并以自动化方式实际部署它呢这些可能包括测试和登台环境以及生产。

CD的兴起也是如此。 创建和自动化部署是进行持续集成的必然结果。 这就是为什么您如此频繁地看到CI和CD在一起提到的原因,以及为什么它们之间的界线如此频繁地变得模糊的原因。

什么是功能标志/h2>

现在,让我们稍微切换一下齿轮并谈论功能标志 。 像CI一样,这是一个看似简单的概念,并且在过去的几年中有了长足的发展。

首先,功能标志意味着将if条件放在新功能周围,并将if条件与代码外部的内容相关。 这可能意味着数据库字段或配置文件设置。

通过这种方式,您可以在代码中带有功能标记的地方部署代码。 然后,一旦它在该环境中运行,您就可以随意打开或关闭该功能。

但这真的只是开始。

当人们开始使用功能标记时,他们喜欢这个想法。 这可能会使他们陷入困境。 一个功能标志变成了几十个,后来变成了数百个。 标志本身也从简单的切换演变为具有实际值的变量。

人们在这种情况下正在做的事情是朝着发布功能而不是软件的强大概念迭代。 但是他们却一团糟。

因此,今天,功能标记源自简单的起点,实际上涉及两件事: 功能标记管理和以产品为中心的功能启用。 没人再需要功能标记-人们需要功能标记框架,该框架允许他们以高度精细的方式部署软件。

一起使用CI,CD和功能标志:交付和发布的粒度分离

现在,以示例的形式一起看所有这些。 假设您有一个会员 站,并且想要添加一些新功能。 当用户将鼠标悬停在另一个用户的个人资料图像上时,它会弹出带有该人当前位置的工具提示。

在二十年前的开发世界中,这将经历年度发布周期,并与数百个其他功能合并。 但是,这就是今天的样子。

开发功能无人问津

将此功能推向市场的开发人员为此添加了最严格的框架,包括使用功能标记管理系统将其关闭(除了本地环境以外)。 她之所以提交此代码是因为她一直在进行集成。 反过来,由于CI / CD的设置,这触发了部署到除生产之外的所有更高环境的工作,并且团队中的其他开发人员撤消了她的更改。

因为该功能在她的机器以外的所有地方都没有,所以即使他们获得了更新的代码,也没有人注意到或关心。

质量检查人员和其他开发人员可根据需要获得此功能

完成后,她将进行最终更改,并在测试环境中打开该功能以进行质量检查。 它仍然不会影响其他开发人员,因此对他们和阶段性都没有影响。

经过质量检查的祝福后,每个人都应该在本地拥有此功能,以便习惯使用它。 定位功能现已在生产以外的所有地方使用,如果出于任何原因要避免使用该功能,则必须将其关闭。

部署风险低且平稳

暂存效果很好,因此产品负责人订购将其部署到生产中。 这并非偶然,因为CD使这一切变得非常容易,并且该功能仍处于生产中。 它只是安静地挂在那儿,直到产品所有者希望将其推出给一小部分用户进行测试为止。

这种区别非常强大,因为它将IT方面的部署与业务方面的发布分开了。

发布功能并管理部署是一项业务决策

一旦产品负责人觉得时间合适,并且团队可以花时间监视发布并提供一些支持,产品负责人就会在生产中为一小部分用户打开该功能。

那很好,因此他们为更多用户打开了它。 他们重复此过程,直到几天后,每个人都具有定位功能。

当然,如果发生任何错误,则无需打补丁或加扰。 他们只是简单地再次关闭了该功能, 告了问题,然后等待该功能的下一个版本再试一次。

CI / CD /功能标志:这应该是您的故事

今天,将CI,CD和功能标志结合在一起的故事可能就是您的故事。 我不是在描述一些遥不可及的梦境,而是描述当今存在的一系列选择。 您的商店可能尚未在所有工具上都放弃实践,但是您可以。

但是,我认为您需要忘记可能,并开始考虑必须。

软件产品竞争激烈,您的竞争对手不会等着看您在发布周期中所做的事情。 他们希望以最快的速度将产品推向市场,以取悦用户。

因此,如果您的竞争对手听说了位置功能,并在一周内实施了该功能,并在将其发布到下一个3月版本的路线图上成功推出时,您认为它将如何呢当他们从现在到3月在数十种功能中重复该过程时,您认为会如何

在当今的形势下,可以在功能级别上计划,实施和部署软件,但是在明天的情况下,这将是至关重要的。 因此,请确保相应地更新您的工具和流程,以免您的竞争对手以我们回头看合并方和邮寄CD的人的方式看待您。

额外资源

  • 了解有关连续一切的更多信息
  • 了解什么阻碍了您的CI / CD管道
  • 了解持续集成的好处

翻译自: https://www.javacodegeeks.com/2018/11/feature-releases-future-require-feature.html

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91738 人正在系统学习中 相关资源:数据据模型设计软件MySQLWorkbench6.3.9CE中文语言汉化版中英双语…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年4月1日
下一篇 2020年4月1日

相关推荐