在禁用功能的情况下将代码运送到生产环境是不是存在风险?
Posted
技术标签:
【中文标题】在禁用功能的情况下将代码运送到生产环境是不是存在风险?【英文标题】:Are there risks associated with shipping code to production with features disabled?在禁用功能的情况下将代码运送到生产环境是否存在风险? 【发布时间】:2012-07-25 01:43:52 【问题描述】:我并不是要含糊其辞,但我对发布有意关闭的代码的想法持怀疑态度,而且我无法找到与该主题相关的任何良好资源。这可能真的是一个“视情况而定”的问题,在这种情况下,请随时投反对票并删除。
我的具体情况是我们自己托管的网络应用程序,每两周“发布”一次(推送到生产环境)。此外,我们目前使用的是 Subversion,尽管在不久的将来会迁移到 Git。
我听说过的一种情况是部署一项功能,该功能依赖于具有尚未发布的已知功能的库,无论是您自己的库还是第三方库。
另一个是在功能完成后发布部分功能,但在所有部分都在生产中之前被禁用。
虽然这两种方法起初听起来都不错,但我质疑生产环境中禁用的代码的价值,尤其是作为一般实践。看起来这可能会导致未完成的功能使代码库变得混乱,并导致配置文件超出所需,只是为了提供禁用/启用功能的方法。
部署故意禁用的代码有哪些好处(如果有的话),在我们以任何频率执行此操作之前需要解决哪些问题?
另外,请分享任何链接,并告诉我这种做法是否有名称。
【问题讨论】:
取决于您运送的物品。想到 GTA 圣安地列斯的“热咖啡模式”:) 【参考方案1】:叫feature toggles
我认为使用基于角色的授权启用/禁用功能并没有更大的风险。您对代码混乱和增加配置的担忧是有道理的,但持续交付的倡导者会认为替代方案(功能分支)更糟糕。
【讨论】:
【参考方案2】:我看到的这样做的主要基础是将代码推送与配置推送分开。如果您可以将它们分开,则更容易确定您是否有错误的版本或错误的配置。您可以默认关闭不完整功能 X 的版本,继续推送可以回滚的版本而不启用它,然后当您决定打开它时,您可以更新您的配置,如果需要也可以回滚。
【讨论】:
以上是关于在禁用功能的情况下将代码运送到生产环境是不是存在风险?的主要内容,如果未能解决你的问题,请参考以下文章