

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Estratégias de ramificação para IaC
<a name="branching-strategies"></a>

A metodologia Git típica usa uma ramificação base de tronco primária (como`main`) para produção, uma ramificação de desenvolvimento e ramificações de recursos. Muitas organizações adotam instantaneamente esse mesmo design de infraestrutura como código (IaC). No entanto, a metodologia Git não é diretamente compatível com padrões comuns de design de infraestrutura. Considere os seguintes pontos:
+ Os aplicativos têm vários ambientes.
  + Exemplos de ambientes incluem sandbox, desenvolvimento, preparação e produção.
+ Os ambientes não estão fortemente acoplados.
  + A produção geralmente está estreitamente associada a implantações preparatórias bem-sucedidas.
  + Normalmente, a produção e a preparação são totalmente dissociadas do ambiente de desenvolvimento.
  + Normalmente, o desenvolvimento é totalmente desacoplado do ambiente sandbox.
+ Cada aplicativo tem seu próprio conjunto de padrões ambientais.
  + Muitos aplicativos não usam um ambiente sandbox.
  + Alguns aplicativos não exigem um ambiente de teste, mas usam uma estratégia de blue/green implantação.

Imagine um cenário em que um repositório de aplicativos forneça três ambientes que usam uma metodologia baseada em troncos. O ambiente de desenvolvimento está vinculado à `develop` filial, a preparação à `staging` filial e a produção à `main` filial. Para esse aplicativo, é necessário um novo recurso para conectar um gateway de trânsito na solução, que é gerenciado por outra equipe e repositório. Um desenvolvedor grava o código da infraestrutura em uma ramificação de recursos e o mescla à `develop` ramificação quando estiver pronto. Tudo parece bem.

No entanto, surge um desafio. Outro desenvolvedor tem uma história de usuário separada para um recurso separado, a grava em uma ramificação de recursos e a mescla com a `develop` ramificação. O segundo recurso agora está pronto para ser mesclado entre preparação e produção. No entanto, o recurso de gateway de trânsito original não está pronto devido a um critério de risco na organização. Agora, todos os recursos estão bloqueados, desde a promoção até a produção, e o código do aplicativo está efetivamente congelado ou quebrado.

Nesse cenário, considere as seguintes soluções possíveis:
+ *Solução mais comum:* aumente a repetição de código (reduza o [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)) em locais específicos da estrutura de código configurando `./environments` pastas separadas no repositório. Isso permite que o código dos ambientes esteja no mesmo repositório, mas desacoplado.
+ Configure um CI/CD processo com gerenciamento complexo de variáveis.
+ Ambientes separados em repositórios separados.
+ *Solução menos comum:* use várias ramificações de tronco.