我问了很多开发人员朋友,CI和CD似乎是人们已经采用或希望采用的两种实践。开发人员普遍喜欢发布他们的新特性,这是工作中令人满意的一部分。在一个理想的世界中,我们可以不断地发布特性,但是随着项目的复杂性和用户的增长,匆忙地掌握这些特性变得太冒险了。
这篇文章解释了我在使用特性标志时的发现,以及为什么Solid State Group最终选择开源https://bullet-train.io。
减少释放周期和压力
在几个月的项目发布周期中,我发现使用这种方法非常轻松。之前,我发现了以下几点:
- UAT涉及对多个相互关联的未发布功能的广泛测试。
- 迫切需要修复的修补程序必须合并,这些修补程序将应用于生产代码,并且可能与停滞的代码冲突/产生副作用。
- 进行了如此多的工作,很难跟踪发布中到底包含什么。
- 似乎较小的功能花了太长时间才能发布,在这里呆了数周却没有产生价值。
- 释放的影响通常很高,立即释放很多会带来应用程序崩溃的风险,在严重的情况下需要回滚。
简而言之,大发行量既昂贵又复杂。发行通常可以减少行李负担和具有讽刺意味的风险。
什么是“功能标志”
令我惊讶的是,尽管我与之交谈的人们对这些做法都非常积极,但只有大约一半的人听说过功能标志。这意味着功能可以在生产中,但是直到需要时才能打开。
功能标记是一种无需配置即可通过配置关闭应用程序某些功能的技术。
如果您正在使用CI / CD并经常发布,则它们非常重要。
为什么“功能标记”很重要
对我来说,能够控制我的代码库外部的功能,甚至在生产环境中为内部用户启用这些功能,都非常适合这种做法。
有一些功能标记服务具有一些优点:
- 将代码发布与部署功能分开
- 引入了通过逐步/目标部署在生产中测试代码的能力
- 赋予非技术团队成员管理功能发布的权限
- 允许及早针对未停滞的代码测试功能。
- 允许您引入Beta程序以获得早期的用户反馈。
- 通过远程关闭功能,减少了回滚代码的需求。
功能标记不足之处
能够在不进行构建的情况下打开和关闭功能真是太好了,但是有了某些功能,它并不是那么简单。这是远程配置的用处。
通常需要配置功能属性,例如更新一些文本以促进应用内货币销售。对于移动应用程序,我以前使用过Firebase的远程配置,这通常意味着等待2天或更长时间的协作iOS和Android构建之间的区别。
介绍Bullet Train
由于在使用功能标志和远程配置方面看到了巨大的好处,因此我们决定构建自己的内部产品。这意味着我们可以利用我们现有的网站/移动应用程序,并对我们所做的工作使用更加一致/正式的方法。
我们找不到任何结合了我们一直使用的两种方法的系统。像LaunchDarkly这样接近的产品超出了我们的价格范围,并没有真正提供我们想要的东西。
该平台是100%开源的,并具有JavaScript、React Native、NodeJS和Java SDK,因此您可以根据需要自行托管所有平台。我们还将托管一个供人们试用的API和管理前端。我们甚至用它来开发Bullet Train!
请随时在该站点上提供一些反馈:bullettrain@solidstategroup.com。
发展愉快!
原文链接:https://dev.to//kylessg/bullet-train-using-feature-flags-and-remote-config-in-ci-2gda