Eu estava explicando um sistema de construção proposto (Gradle / Artifactory / Jenkins / Chef) a um de nossos arquitetos seniores, e ele fez um comentário para mim que eu meio que discordo, mas não tenho experiência suficiente para pesar.
Este projeto constrói uma biblioteca Java (JAR) como um artefato a ser reutilizado por outras equipes. Para controle de versão, eu gostaria de usar a abordagem semântica de:
<major>.<minor>.<patch>
Onde patch
indica correções de bugs / emergência, minor
indica versões compatíveis com versões anteriores e major
indica refatorações em massa da API e / ou alterações incompatíveis com versões anteriores.
No que diz respeito à entrega, aqui está o que eu quero: um desenvolvedor compromete algum código; isso aciona uma construção em um ambiente de controle de qualidade / teste. Alguns testes são executados (alguns automatizados, outros manuais). Se todos os testes forem aprovados, uma compilação de produção publica o JAR em nosso repositório interno. A essa altura, o JAR deveria ser versionado corretamente, e meu pensamento era usar o build.number
que é gerado automaticamente e fornecido por nossa ferramenta de CI para atuar como o número do patch.
Assim, o versionamento seria realmente:
<major>.<minor>.<build.number>
Novamente, onde build.number
é fornecido pela ferramenta de IC.
O arquiteto descartou isso, dizendo que o uso do número de compilação do IC era um "abuso" do controle de versão semântico.
Minha pergunta é: isso está correto? Em caso afirmativo, por quê? E se não, por que não?
Um dos motivos é que o patch pode exigir várias compilações; portanto, se você possui a versão 5.7 e deseja corrigi-lo para a 5.7.1, mas suas duas primeiras correções não são compiladas quando enviadas ao sistema de IC, você será na 5.7.3 antes de você lançar seu primeiro patch!
A resposta é simplesmente usar 4 dígitos (como os sistemas Microsoft costumam ter). O quarto é um número de compilação e é usado "apenas para informação". Geralmente, as pessoas colocam o número da versão do repositório (se eles usam SVN, TFS ou similar), o que é muito bom, pois você pode verificar qual confirmação exata foi usada para criar os binários. Se você não tem esse tipo de coisa, o número de compilação do IC é uma aproximação razoável (como seria de esperar que o sistema do IC se lembre dos números da compilação e vincule-o ao histórico do repo, mas você não depende do IC sistema lembrando-os - você nunca pode excluir versões antigas).
Uma coisa a observar, o esquema da Microsoft para controle de versão usa a terceira posição para criar números. O Chrome usa apenas 1 número. O Ubuntu usa a data. Não há "padrão" a ser usado , exceto que todos os números devem ser incrementados.
fonte