Tenho lidado com o problema de escalonamento de CI na minha empresa e, ao mesmo tempo, tentando descobrir qual abordagem tomar quando se trata de CI e várias filiais. Há uma questão semelhante em stackoverflow, Multiple feature branches e integração contínua . Comecei um novo porque gostaria de obter mais discussão e fornecer algumas análises sobre a questão.
Até agora descobri que existem 2 abordagens principais que posso adotar (ou talvez algumas outras ???).
- Vários conjuntos de trabalhos (falando sobre Jenkins / Hudson aqui) por filial
- Escreva ferramentas para gerenciar os trabalhos extras
- Criar / modificar / excluir trabalhos em massa
- Configurações personalizadas para cada trabalho por filial (url SCM, duplicações de repositórios de gerenciamento de depósito)
- Alguns exemplos de pessoas lidando com esse problema com ferramentas shell, scripts de formigas e Jenkins CLI. Vejo:
- http://jenkins.361315.n4.nabble.com/Multiple-branches-best-practice-td2306578.html
- http://jenkins.361315.n4.nabble.com/Is-it-possible-to-handle-multiple-branches-where-some-jobs-should-run-on-each-one-without-duplicatin-td954729. html
- http://jenkins.361315.n4.nabble.com/Parallel-development-with-branches-td1013013.html
- Configurar ou criar um trabalho hudson automaticamente
- Irá causar mais carga no seu cluster CI
- O ciclo de feedback para desenvolvedores fica lento (se a infraestrutura não puder lidar com a nova carga)
- Escreva ferramentas para gerenciar os trabalhos extras
- Vários conjuntos de trabalhos por 2 ramos (dev e estável)
- Gerenciar os dois conjuntos manualmente (se você alterar a configuração de um trabalho, certifique-se de alterar no outro ramo)
- PITA, mas pelo menos tão poucos para gerenciar
- Outros branches extras não terão um conjunto de testes completo antes de serem enviados para o dev
- Devs insatisfeitos. Por que um desenvolvedor deveria se preocupar com problemas de escala de CI? Ele tem um pedido simples, quando eu ramificar gostaria de testar meu código. Simples.
- Gerenciar os dois conjuntos manualmente (se você alterar a configuração de um trabalho, certifique-se de alterar no outro ramo)
Então, parece que se eu quiser fornecer aos desenvolvedores CI para seus próprios branches personalizados, preciso de ferramentas especiais para Jenkins (API ou shellscripts ou algo assim?) E lidar com o dimensionamento. Ou posso dizer a eles para mesclar com mais frequência ao DEV e viver sem CI em branches personalizados. Qual você escolheria ou existem outras opções?