问题描述
有可能客户希望某些功能或特性基于特定的季节或特定的日期/时间/时区可用。这可能会根据代码逻辑或数据库更改在其他屏幕/逻辑层中传播或影响到其他屏幕/逻辑层。团队如何在CI/CD或DevOps作为一个过程中处理上述情况?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
在CI/CD或DevOps过程中,可以使用以下技术来处理基于受限时间表的发布需求:
1. 分支抽象(Branch-by-abstraction):这是一种允许在同一分支中以不同程度的准备度开发任意组合功能的技术。对于一个合适的CI/CD方法来说,这应该是main
/master
分支。每个正在开发的功能可以通过打开或关闭相应的标志来进行独立测试。在该分支中,“发布”功能意味着在源代码中启用相应的标志。
2. 功能标志(Feature Flags):功能标志或功能切换是一种允许在应用程序中动态启用或禁用特定功能的技术。通过在代码库中打开或关闭这些标志,可以根据特定的时间表或日期/时间来控制功能的可用性。这种方法可以根据需要在不同的时间点启用或禁用特定的功能。
3. 超级标志(Super Flags):将多个功能标志组合到一个超级标志下是减少相关组合数量的有效方法。根据发布计划,可以在代码库中打开这些超级标志。这些超级标志的打开时间可以是周期性的,也可以基于特定的时间/日期/季节,这并不重要(当然,前提是相应的功能在预期的质量水平上满足要求,但这是另一个讨论)。
4. 发布分支(Release Branches):对于无法连续部署的软件产品(如操作系统或大多数嵌入式软件产品),可以创建发布分支来控制发布时间和成本。在这些发布分支中,只启用适用于相应发布的超级标志(或直接功能标志)。这些发布分支还可以作为后续热修复、服务包和/或小版本发布的CI/CD分支工具。
5. 发布分支管理:发布分支应该从主/主分支(或父级主要发布分支)中分离出来,只要质量水平足够好以供下一个发布使用,并且支持到第二个下一个发布的增量仍然可接受(一旦为下一个发布拉出分支,父分支可以分叉,朝着第二个下一个发布前进)。
请注意,发布分支并不一定是“邪恶”的:它们不是功能分支,并且可以完全避免任何大规模的分支同步/重定位/合并操作,从而保持CI原则的真实性。
方案2
请注意以下操作注意版本差异及修改前做好备份。
另一种处理基于受限时间表的发布需求的方法是使用脚本或工具来控制发布的顺序。以下是一个示例脚本,可以根据特定的时间表或日期/时间来启动或停止特定的功能:
#!/bin/bash
# 启用特定的功能
if [ $(date +%m%d) -ge 0101 ] && [ $(date +%m%d) -le 1231 ]; then
# 启用功能代码
else
# 禁用功能代码
fi
在这个示例中,我们使用了一个简单的bash脚本来根据当前日期来启用或禁用特定的功能。通过检查当前日期是否在指定的范围内,我们可以决定是否启用或禁用相应的功能。
请注意,这只是一个示例脚本,你可以根据实际需求进行修改和扩展。
以上是处理基于受限时间表的发布需求的一些常见方法。具体的实施方法取决于项目的需求和团队的偏好。在实施之前,请确保对所选方法进行充分的测试和验证,以确保其适用性和稳定性。