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:
-
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.
-
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.
-
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.
-
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.
-
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:
-
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.
-
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.
-
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.
-
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.
-
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:
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:
-
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.
-
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.
-
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.
Nenhum comentário