Sim, acredito que sim. Para explicar que preciso estabelecer algumas bases para implementar algo semelhante, simplifiquei o modelo na tentativa de torná-lo o mais claro possível.
Premissas
Estou assumindo aqui que Jenkins, TeamCity ou similar está sendo usado como a ferramenta de CI / CD de sua escolha. Além disso, o GitHub está sendo usado e existe uma estrutura de ramificação bem definida e adequadamente controlada :
Configuração
Neste exemplo, o GitHub está configurado da seguinte maneira:
- A ramificação 'Master' preta só pode ser mesclada usando solicitações pull , confirmações diretas não são permitidas.
- O ramo 'Desenvolvimento' da Blue pode aceitar confirmações diretas ou mesclagens; na prática, pode haver restrições adicionais nesse ramo.
- O ramo 'Hotfix' vermelho pode aceitar confirmações diretas e mesclagens.
- As verificações de status necessárias são ativadas no modo estrito para impedir que as solicitações pull sejam mescladas quando a ramificação está com falha na construção.
- Se a ramificação de hotfix estiver à frente do mestre, as solicitações de recebimento no mestre serão bloqueadas, com a API de status ou os ganchos de pré-recebimento no GitHub Enterprise .
As ferramentas de CI / CD estão configuradas da seguinte maneira:
- As compilações da ramificação Desenvolvimento não podem ser implantadas na produção.
- Construções do Master podem ser implantadas em todos os ambientes.
- As compilações do Hotfix podem ser implantadas em todos os ambientes.
- As implantações do Hotfix notificarão alguma função que não seja de desenvolvimento, por exemplo, a equipe Alterar / Liberar e solicitarão que eles executem a pós-aprovação .
Notas
O Mestre está protegido, pois representa o estado atual da produção. Para fazer isso praticamente, você pode ter outra ramificação "Release" da qual as implantações são feitas e somente quando a fusão for bem-sucedida na ramificação Master.
Pontos chave
O ramo de desenvolvimento azul é basicamente um tudo para todos. O hotfix é um tipo gratuito, mas todas as implantações acionam um tipo de Break Glass notificando uma função de não desenvolvimento que executará a pós-aprovação e, no processo, mesclará a alteração no Master.
É essencial mesclar na parada Master enquanto o Hotfix está à frente do Master para:
- Impedir que uma implantação do mestre substitua o hotfix, o que pode resultar em uma regressão.
- Impedir que um hotfix fique no ramo de hotfix definhando sem ser mesclado.
Em algumas organizações, pode ajudar a impedir todos os envios para o repositório central do GitHub enquanto um Hotfix está pendente de pós-aprovação.