Somos uma empresa pequena, com várias equipes que gerenciam seus próprios repositórios git. Essa é uma plataforma da web e os artefatos de cada equipe são implementados no final do dia para testes noturnos. Estamos tentando formalizar o processo de versionamento e empacotamento.
Cada equipe tem um ramo principal, onde eles desenvolvem o dia-a-dia. Os membros de garantia de qualidade de cada equipe desejam que os artefatos das alterações de sua equipe sejam implantados em um local de teste onde todos os componentes são combinados pelo chef. Os artefatos são tarballs, mas gostaria de convertê-los em RPMs para que possamos pensar e raciocinar sobre as versões corretamente.
O processo de liberação envolve cortar uma ramificação de liberação da ramificação de desenvolvimento (mestre na maioria dos casos) de cada repositório git. Isso é concedido à garantia de qualidade, que executa testes e termina com um conjunto de artefatos.
Por exemplo, este é um repositório git típico com seus ramos de versão associados:
0-0-0-0-0-0-0-0-0-0 (master)
| |
0 0
(rel-1) |
0
(rel-2)
Estou preso tentando descobrir um esquema para executar a versão de pacotes provenientes de ramos de desenvolvimento. Não queremos marcar excessivamente a ramificação principal de cada repo e restringir as tags para liberar apenas ramificações. Mas devemos poder consultar os pacotes implementados nas máquinas de teste usando a semântica padrão yum / rpm. Como seriam as versões de desenvolvimento quando o ramo mestre não possui tags? Entendo que isso git describe
pode me fornecer uma representação útil de uma versão de compilação, mas que funciona bem quando vários pontos de liberação na ramificação são marcados.
EDIT1: Em resposta à resposta de @ Urban48
Eu pensei que deveria explicar um pouco mais o nosso processo de lançamento. Para os propósitos desta discussão, vamos assumir que temos ramificações master
em todos os repositórios. A master
ramificação é considerada a ramificação de desenvolvimento e é implantada em um ambiente de controle de qualidade habilitado para CI-CD automatizado. É aqui que um subconjunto de testes noturnos é executado para garantir a estabilidade do mestre. Examinamos esse fluxo de trabalhos antes de cortar um ramo de lançamento. Nossos ramos de lançamento têm vida curta. Por exemplo, depois de cortar uma ramificação de liberação (de um mestre estável), uma regressão completa é executada, as correções são feitas e implementadas na produção. Isso leva cerca de uma semana para fazer. Lançamos quase a cada duas semanas para produção.
Nossas ramificações de recursos são sempre cortadas do mestre e passam por uma certa quantidade de testes do desenvolvedor antes de serem mescladas com o mestre no qual eles passam pelas verificações de estabilidade do CI-CD.
Os hotfixes são feitos em ramificações de hotfix (cortados das ramificações de lançamento) e implantados com testes de impacto mínimo na produção.
Nossa estratégia de versão para ramificações de versão e hotfix segue sempre. As ramificações de liberação durante o ciclo de controle de qualidade passam por versões como e v2.0.0-rc1
, v2.0.0-rc2
finalmente, após a aprovação do controle de qualidade v2.0.0
.
Às vezes, fazemos lançamentos pontilhados para pequenos recursos que são mesclados para liberar ramificações (e depois dominar) onde as versões se tornam v2.1.0
. E os hotfixes assumem o v2.1.1
padrão.
A questão, no entanto, não é sobre a versão desses ramos. Eu preferiria não mudar completamente esse esquema de versão. A única mudança ocorre no ramo de desenvolvimento, ie. mestre. Como posso indicar de forma confiável no ambiente do CI-CD qual versão existe na versão anterior em produção. Idealmente, isso seria feito através da marcação inteligente com git, mas é preferível algo que não marque excessivamente a ramificação principal.
rc
sufixo? Isso ditaria a major.minor
versão de desenvolvimento. rc
e o número da compilação pode ser obtido com base apenas nisso. Também rc
no master não faz sentido, porque nunca saímos do master. Nós marcar nossos candidatos libertação hoje em ramos de libertação como parte do ciclo de lançamento
rc
sufixo.