Uma versão do produto, como v1.0.0.100
, representa não apenas uma versão de produção exclusiva do software, mas ajuda a identificar conjuntos de recursos e estágios de hotfix para o referido produto. No momento, vejo duas maneiras de manter a versão final do pacote / build / binário de um produto:
Controle de versão. Um arquivo em algum lugar armazena o número da versão. O servidor de criação de Integração Contínua (IC) terá um script para criar o software que usa esse número de versão com check-in para aplicá-lo a todas as áreas do software necessárias (binários, pacotes de instalação, páginas de ajuda, documentação, etc.).
Ambiente e / ou parâmetros de construção. Eles são mantidos fora do controle de versão (ou seja, não estão vinculados ao snapshot / tag / branch). Os scripts de construção distribuem e usam o número da mesma maneira, mas apenas obtêm o valor de forma diferente (é fornecido ao script de construção, em vez de o script saber onde obtê-lo em relação à árvore de origem).
O problema com a primeira abordagem é que ela pode complicar as mesclagens nas ramificações da linha principal. Se você ainda mantiver duas versões paralelas do mesmo software, resolverá conflitos ao mesclar entre as duas linhas principais se a versão tiver sido alterada em ambas desde a última mesclagem.
O problema com a segunda abordagem é a reconciliação. Quando você voltar a um lançamento há um ano, dependerá exclusivamente das informações da etiqueta para identificar seu número de lançamento.
Nos dois casos, pode haver certos aspectos do número da versão desconhecidos antes da criação do IC. Por exemplo, uma compilação de IC pode incluir programaticamente um 4º componente que é realmente o número de compilação automatizado (por exemplo, 140ª compilação na ramificação). Também pode ser um número de revisão no VCS.
Qual é a melhor maneira de acompanhar o número da versão do software? As partes "conhecidas" devem sempre ser mantidas no VCS? E se sim, os conflitos entre as filiais da linha principal são um problema?
No momento, mantemos nosso número de versão por meio de parâmetros especificados e mantidos no plano de construção do IC (Atlassian Bamboo). Antes de mesclar para nossa master
filial, precisamos ter cuidado para que os números de versão sejam configurados corretamente antes do início da criação do IC . Com relação ao fluxo de trabalho do Gitflow, acho que se o número da versão fosse rastreado no controle de origem, poderíamos garantir que ele esteja configurado corretamente quando criarmos nossa release
filial na preparação do lançamento. O controle de qualidade executaria os testes finais de integração / fumaça / regressão nessa ramificação e, após a saída, ocorrerá uma mesclagem master
que sinaliza o compromisso de liberação.
version.txt
que uma versão contém a única linha1.0.7
e a outra é1.2.0
realmente difícil de resolver? Se esse for o único conflito na fusão de dois ramos que se separaram, eu me consideraria com muita sorte. Com que frequência isso ocorre? Se isso ocorrer, não é bom que você seja forçado a pensar sobre qual número de versão a versão mesclada deve ter? (Desculpe pelo uso ambíguo da palavra "versão".)