Implemente uma estratégia de ramificação do Gitflow para ambientes com várias contas DevOps - Recomendações da AWS

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á.

Implemente uma estratégia de ramificação do Gitflow para ambientes com várias contas DevOps

Mike Stephens, Stephen DiCato, Abhilash Vinod e Tim Wondergem, da Amazon Web Services

Resumo

Ao gerenciar um repositório de código-fonte, diferentes estratégias de ramificação influenciam os processos de desenvolvimento e de liberação de software empregados pelas equipes de desenvolvimento. Exemplos de estratégias comuns de ramificação incluem Trunk, Gitflow e Flow. GitHub Essas estratégias usam diferentes ramificações, e as atividades realizadas em cada ambiente são distintas. As organizações que estão implementando DevOps processos se beneficiariam de um guia visual para ajudá-las a entender as diferenças entre essas estratégias de ramificação. A utilização deste material visual na sua organização auxilia as equipes de desenvolvimento a coordenar as atividades e cumprir os padrões organizacionais. O presente padrão fornece este material visual e descreve o processo de implementação da estratégia de ramificação do Gitflow em sua organização.

Esse padrão faz parte de uma série de documentação sobre como escolher e implementar estratégias de DevOps ramificação para organizações com várias Contas da AWS. A série foi desenvolvida para orientar você na aplicação da estratégia adequada e das práticas recomendadas desde o início, simplificando sua experiência na nuvem. O Gitflow é apenas uma das possíveis estratégias de ramificação que sua organização pode utilizar. Esta série de documentação também aborda os modelos de ramificação Trunk e GitHub Flow. Se você ainda não fez isso, recomendamos que você analise Como escolher uma estratégia de ramificação do Git para DevOps ambientes com várias contas antes de implementar a orientação desse padrão. É importante usar a diligência prévia para escolher a estratégia de ramificação mais adequada para a organização.

Este guia fornece um diagrama que ilustra como uma organização poderia implementar a estratégia do Gitflow. É recomendável que você revise o AWS DevOps Well-Architected Guidance para analisar as melhores práticas. Esse padrão inclui tarefas, etapas e restrições recomendadas para cada etapa do DevOps processo.

Pré-requisitos e limitações

Pré-requisitos

  • Git, instalado. Ele é usado como ferramenta de repositório para o código-fonte.

  • Draw.io, instalado. Esta aplicação é usada para visualizar e editar o diagrama.

  • (Opcional) Plug-in do Gitflow, instalado.

Arquitetura

Arquitetura de destino

O diagrama apresentado a seguir pode ser usado de forma semelhante a um Quadro de Punnett (Wikipedia). Você alinha as ramificações no eixo vertical com os AWS ambientes no eixo horizontal para determinar quais ações realizar em cada cenário. Os números representam a sequência das atividades no fluxo de trabalho. Neste exemplo, você acompanha o caminho de uma ramificação de recurso até a implantação em um ambiente de produção.

Quadro de Punnett das atividades do Gitflow em cada ramificação e ambiente.

Para obter mais informações sobre ambientes e ramificações em uma abordagem do Contas da AWS Gitflow, consulte Escolhendo uma estratégia de ramificação do Git para ambientes com várias contas. DevOps

Automação e escala

A integração contínua e a entrega contínua (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDpipelines) também fornecem governança e barreiras para as equipes de desenvolvimento, impondo consistência, padrões, melhores práticas e níveis mínimos de aceitação para aceitação e implantação de recursos. Para obter mais informações, consulte Praticando a integração contínua e a entrega contínua em AWS.

AWS oferece um conjunto de serviços para desenvolvedores projetados para ajudá-lo a criar CI/CD pipelines. Por exemplo, AWS CodePipelineé um serviço de entrega contínua totalmente gerenciado que ajuda você a automatizar seus pipelines de lançamento para atualizações rápidas e confiáveis de aplicativos e infraestrutura. AWS CodeBuildcompila o código-fonte, executa testes e produz pacotes ready-to-deploy de software. Para obter mais informações, consulte Ferramentas do desenvolvedor em AWS.

Ferramentas

AWS serviços e ferramentas

AWS fornece um conjunto de serviços para desenvolvedores que você pode usar para implementar esse padrão:

  • O AWS CodeArtifact é um serviço gerenciado e altamente escalável de repositório de artefatos, que facilita o armazenamento e o compartilhamento de pacotes de software para o desenvolvimento de aplicações.

  • O AWS CodeBuild é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.

  • AWS CodeDeployautomatiza implantações no Amazon Elastic Compute Cloud (Amazon EC2) ou em instâncias AWS Lambda , funções ou serviços do Amazon Elastic Container Service (Amazon ECS) no local.

  • O AWS CodePipeline ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.

Outras ferramentas

  • O Draw.io Desktop é uma aplicação voltada para a criação de fluxogramas e diagramas. O repositório de código contém modelos no formato .drawio para o Draw.io.

  • O Figma é uma ferramenta de design on-line voltada para a colaboração. O repositório de código contém modelos no formato .fig para o Figma.

  • (Opcional) O plug-in do Gitflow consiste em um conjunto de extensões do Git que disponibilizam operações avançadas de repositório para o modelo de ramificação do Gitflow.

Repositório de código

Esse arquivo fonte para o diagrama nesse padrão está disponível na Estratégia de ramificação do GitHub Git para repositório. GitFlow Estão incluídos arquivos nos formatos PNG, draw.io e Figma. É possível modificar esses diagramas para adequação aos processos da sua organização.

Práticas recomendadas

Siga as melhores práticas e recomendações em AWS DevOps Well-Architected Guidance e Choosing a Git branching strategy para ambientes com várias contas. DevOps Esses recursos auxiliam na implementação eficiente do desenvolvimento baseado em Gitflow, incentivam a colaboração, aumentam a qualidade do código e agilizam o processo de desenvolvimento.

Épicos

TarefaDescriptionHabilidades necessárias

Analise o processo padrão do Gitflow.

  1. No ambiente de sandbox, o desenvolvedor cria uma ramificação feature com base na ramificação develop e usa o padrão de nomenclatura feature/<ticket>_<initials>_<short description>.

  2. O desenvolvedor desenvolve o código e o implanta iterativamente no ambiente de sandbox para concluir o tíquete.

    nota

    O desenvolvedor pode, opcionalmente, criar uma ramificação sandbox para executar uma compilação automatizada ou implantar um pipeline no ambiente de sandbox.

  3. O desenvolvedor cria uma solicitação de mesclagem da ramificação feature para a ramificação develop usando uma mesclagem por compressão.

  4. Um pipeline de integração contínua e entrega contínua (CI/CD) desenvolve e implanta automaticamente a ramificação develop no ambiente de desenvolvimento.

  5. (Opcional) Um desenvolvedor integra ramificações feature adicionais na ramificação destinada ao desenvolvimento antes de prosseguir com as atividades de liberação.

  6. Quando estiver com tudo pronto para liberar os recursos na ramificação develop, o desenvolvedor cria uma ramificação release, chamada release/v<number>, com base na ramificação develop.

  7. O desenvolvedor realiza a compilação da ramificação destinada à liberação, que publica artefatos para reutilização em outros ambientes.

  8. Um aprovador autoriza manualmente a implantação dos artefatos da liberação no ambiente de testes.

  9. Um aprovador autoriza manualmente a implantação dos artefatos da liberação no ambiente de preparação.

  10. Um aprovador autoriza manualmente a implantação dos artefatos da liberação no ambiente de produção.

  11. O desenvolvedor mescla a ramificação release na ramificação main. Preferencialmente, o desenvolvedor recorre a um script automatizado para executar uma mesclagem por avanço rápido. Não use uma mesclagem por compressão.

  12. O desenvolvedor mescla a ramificação release na ramificação develop. Preferencialmente, o desenvolvedor recorre a um script automatizado para executar uma mesclagem por avanço rápido. Não use uma mesclagem por compressão.

DevOps engenheiro

Analise o processo do Gitflow para correções urgentes.

  1. O desenvolvedor cria uma ramificação hotfix com base na ramificação main e usa o padrão de nomenclatura hotfix/<ticket>_<initials>_<short description>.

  2. O desenvolvedor cria uma ramificação release com base na ramificação main e a nomeia como release/v<number>.

  3. O desenvolvedor corrige o problema, realiza a confirmação da correção e desenvolve a ramificação hotfix.

  4. O desenvolvedor cria uma solicitação de mesclagem da ramificação hotfix para a ramificação release/v<number> usando uma mesclagem por compressão.

  5. O desenvolvedor realiza a compilação da ramificação release, que publica artefatos para reutilização em outros ambientes.

  6. Um aprovador autoriza manualmente a implantação dos artefatos da liberação no ambiente de testes.

  7. Um aprovador autoriza manualmente a implantação dos artefatos da liberação no ambiente de preparação.

  8. Um aprovador autoriza manualmente a implantação dos artefatos da liberação no ambiente de produção.

  9. O desenvolvedor mescla a ramificação release na ramificação main. Preferencialmente, o desenvolvedor recorre a um script automatizado para executar uma mesclagem por avanço rápido. Não use uma mesclagem por compressão.

  10. O desenvolvedor mescla a ramificação release na ramificação develop. Preferencialmente, o desenvolvedor recorre a um script automatizado para executar uma mesclagem por avanço rápido. Não use uma mesclagem por compressão.

  11. Se um conflito for detectado, os desenvolvedores recebem um alerta e resolvem o conflito por meio de uma solicitação de mesclagem.

DevOps engenheiro

Analise o processo do Gitflow para correções de bugs.

  1. O desenvolvedor cria uma ramificação bugfix com base na ramificação release/v<number> atual e usa o padrão de nomenclatura bugfix/<ticket number>_<developer initials>_<descriptor>.

  2. O desenvolvedor corrige o problema, realiza a confirmação da correção e desenvolve a ramificação bugfix.

  3. O desenvolvedor cria uma solicitação de mesclagem da ramificação bugfix para a ramificação release/v<number> usando uma mesclagem por compressão.

  4. O desenvolvedor realiza a compilação da ramificação release, que publica artefatos para reutilização em outros ambientes.

  5. Um aprovador autoriza manualmente a implantação dos artefatos da liberação no ambiente de testes.

  6. Um aprovador autoriza manualmente a implantação dos artefatos da liberação no ambiente de preparação.

  7. Um aprovador autoriza manualmente a implantação dos artefatos da liberação no ambiente de produção.

  8. O desenvolvedor mescla a ramificação release na ramificação main. Preferencialmente, o desenvolvedor recorre a um script automatizado para executar uma mesclagem por avanço rápido. Não use uma mesclagem por compressão.

  9. O desenvolvedor mescla a ramificação release na ramificação develop. Preferencialmente, o desenvolvedor recorre a um script automatizado para executar uma mesclagem por avanço rápido. Não use uma mesclagem por compressão.

  10. Se um conflito for detectado, os desenvolvedores recebem um alerta e resolvem o conflito por meio de uma solicitação de mesclagem.

DevOps engenheiro

Solução de problemas

ProblemaSolução

Conflitos em ramificações

Um problema comum que pode ocorrer com o modelo do Gitflow é quando uma correção urgente precisa ser aplicada em um ambiente de produção, mas é necessário realizar uma alteração correspondente em um ambiente menos avançado, no qual outra ramificação está modificando os mesmos recursos. Recomendamos que você tenha apenas uma ramificação de liberação ativa por vez. Se você tiver mais de uma ramificação ativa ao mesmo tempo, as alterações nos ambientes podem entrar em conflito, impedindo que uma ramificação seja transferida para a produção.

Mesclar

As liberações devem ser mescladas de volta nas ramificações principal e de desenvolvimento o quanto antes, para consolidar o trabalho nas ramificações primárias.

Mesclagem por compressão

Use a mesclagem por compressão apenas ao mesclar de uma ramificação feature para uma ramificação develop. Usar mesclagens por compressão em ramificações avançadas dificulta a mesclagem das alterações de volta para as ramificações menos avançadas.

Recursos relacionados

Este guia não inclui treinamento em Git. No entanto, existem muitos recursos de alta qualidade disponíveis na internet, caso você precise realizar esse treinamento. Recomendamos que você comece pelo site de documentação do Git.

Os recursos apresentados a seguir podem ajudar você na jornada de implementação de ramificações do Gitflow na Nuvem AWS.

AWS DevOps orientação

Orientações para o Gitflow

Outros recursos

Twelve-factor app methodology (12factor.net)