

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# IaC 的分支策略
<a name="branching-strategies"></a>

典型的 Git 方法使用主干基础（例如`main`）用于生产的分支、开发分支和功能分支。许多组织会立即采用同样的基础设施即代码 (IaC) 设计。但是，Git 方法与常见的基础架构设计模式并不直接兼容。请考虑以下几点：
+ 应用程序有多个环境。
  + 环境示例包括沙盒、开发、暂存和生产。
+ 环境不是紧密耦合的。
  + 生产通常与成功的分阶段部署紧密结合。
  + 生产和暂存通常与开发环境完全脱钩。
  + 开发通常与沙盒环境完全脱钩。
+ 每个应用程序都有自己的一套环境标准。
  + 许多应用程序不使用沙盒环境。
  + 有些应用程序不需要暂存环境，而是使用 blue/green 部署策略。

想象一下这样一个场景：应用程序存储库提供三个使用基于主干的方法的环境。开发环境与分支相关联，暂存与`develop`分支相关联，生产环境与`staging`分`main`支相关联。对于此应用程序，需要一项新功能来连接解决方案中的公交网关，该网关由另一个团队和存储库管理。开发人员在功能分支中编写基础架构代码，准备就绪后将其合并到该`develop`分支。一切看起来都很好。

但是，挑战出现了。另一位开发者为单独的功能创建了单独的用户故事，将其写在功能分支中，然后将其合并到该`develop`分支。第二部功能现已准备就绪，可以合并到舞台和制作中。但是，由于组织中的风险标准，最初的公交网关功能尚未准备就绪。现在，所有功能都无法升级到生产，并且应用程序代码实际上已被冻结或损坏。

在这种情况下，请考虑以下可能的解决方案：
+ *最常见的解决方案：*通过在存储库中设置单独`./environments`的文件夹，增加目标代码结构位置的代码重复（减少 DR [Y](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)）。这允许环境的代码位于同一个存储库中，但可以分离。
+ 设置具有复杂变量管理的 CI/CD 流程。
+ 将环境分成单独的存储库。
+ *最不常见的解决方案：*使用多个主干分支。