Ir para o conteúdo principal

Proposta de padronização versionamento e deploys

Este documento trás uma propossta de versionamento de branches após deploys em produção, assim como auxiliar no fluxo ideal à ser utilizado no desenvolvimento de softwares.

O versionamento e o fluxo de branches são práticas fundamentais no desenvolvimento de softwares que visam aprimorar a colaboração, o controle de qualidade e a eficiência do processo de desenvolvimento. A importância dessas práticas pode ser resumida da seguinte forma:

Versionamento:

  1. Rastreabilidade: O versionamento permite rastrear alterações específicas no código-fonte ao longo do tempo. Isso é essencial para entender o histórico de desenvolvimento, identificar a origem de problemas e facilitar a auditoria.

  2. Colaboração: Equipes de desenvolvimento podem trabalhar em paralelo, cada uma em sua própria versão do código, e depois mesclar suas contribuições. Isso melhora a colaboração, evita conflitos e permite um desenvolvimento mais rápido.

  3. Gestão de Versões: O versionamento ajuda a controlar e distribuir diferentes versões do software. Isso é crucial para fornecer atualizações e correções de bugs aos usuários sem comprometer as versões existentes.

  4. Experimentação e Testes: Ramificações específicas podem ser criadas para testar novos recursos ou correções sem interferir na versão principal. Isso permite testes exaustivos antes de incorporar mudanças na versão estável.

  5. Rollback Eficiente: Se um problema é detectado em uma nova versão, é possível reverter facilmente para uma versão anterior usando o sistema de versionamento.

Fluxo de Branches:

  1. Isolamento de Mudanças: O uso de branches separados permite que diferentes recursos ou correções sejam desenvolvidos independentemente, isolando-os uns dos outros. Isso minimiza o risco de conflitos e mantém a estabilidade do código principal.

  2. Desenvolvimento Contínuo: O fluxo de branches suporta desenvolvimento contínuo, permitindo que a equipe trabalhe em várias funcionalidades ao mesmo tempo sem afetar a integridade do código principal.

  3. Testes e Validação: As ramificações facilitam a realização de testes dedicados para cada nova funcionalidade ou correção. Isso ajuda a identificar problemas precocemente e a garantir a qualidade do software.

  4. Ciclo de Feedback: O fluxo de branches permite a revisão de código e o fornecimento de feedback antes de mesclar as mudanças no ramo principal. Isso melhora a qualidade do código e a troca de conhecimento entre os membros da equipe.

  5. Deploy Gradual: A separação de funcionalidades em diferentes ramificações permite implantar novos recursos de forma gradual, evitando interrupções drásticas no sistema.

Em resumo, o versionamento e o fluxo de branches são práticas cruciais para o desenvolvimento de softwares eficiente e organizado, permitindo o controle preciso das mudanças, a colaboração harmoniosa entre desenvolvedores e a entrega de software de alta qualidade aos usuários. A imagem abaixo ilustra bem, o que seria um fluxo bem definido na solução de desenvolvimento de features em um sistema.

FLUXO DE BRANCHES:

image.png

Considerando a imagem acima, temos inicialmente uma branch de desenvolvimento da qual ramificará, para outras features. Mas observe, toda feature deve ir para a branch de desenvolvimento.

Ao final do ciclo, com todas as alterações que foram validadas nasce uma branch temporária onde serão compiladas todas as features feitas naquele ciclo, e com isso são deployadas no ambiente STAGING em seguida, deployadas no ambiente de PRODUÇÃO.

Os HOTFIX realizados diretamente no ambiente de PRODUÇÃO, devem ser mergeados na branch de DESENVOLVIMENTO e em seguida subidos para a branch de STAGING. Para que os ambientes anteriores possuam aquele HOTFIX realizado anteriormente.

VERSIONAMENTO:

O versionamento, consiste em versionar cada deploy/release criado naquele sistema após a compilação de features validadas pelo QA e Product Owner, basicamente seguimos o versionamento semântico. 

O versionamento semântico geralmente adere a um formato de número de versão composto por três números separados por pontos: MAJOR.MINOR.PATCH. Cada um desses números tem um significado específico:

  1. MAJOR: O número de versão "MAJOR" é incrementado quando há mudanças significativas que incluem funcionalidades novas ou alteradas de forma incompatível com versões anteriores. Isso indica que a nova versão pode exigir ajustes ou atualizações por parte dos usuários ou desenvolvedores que dependem do software.

  2. MINOR: O número de versão "MINOR" é incrementado quando novas funcionalidades são adicionadas de maneira compatível com versões anteriores, ou seja, sem quebras de compatibilidade. Geralmente, isso inclui adições que ampliam a funcionalidade existente.

  3. PATCH: O número de versão "PATCH" é incrementado quando são feitas correções de bugs ou ajustes menores que não afetam a funcionalidade geral ou a compatibilidade com versões anteriores.

Além desses três números, o versionamento semântico também pode incluir informações opcionais, como "pré-lançamentos" (pre-release) e "metadados" (metadata), que fornecem detalhes adicionais sobre a versão.

A importância do versionamento semântico reside na sua capacidade de fornecer uma estrutura clara e padronizada para comunicar as mudanças em um software. Isso facilita a tomada de decisões informadas sobre atualizações, ajuda a evitar quebras inesperadas em sistemas dependentes, simplifica a gerência de dependências e contribui para uma colaboração mais eficiente entre equipes de desenvolvimento. Em essência, o versionamento semântico ajuda a manter a ordem e a previsibilidade no ciclo de vida do software.