Faço parte de um grupo de desenvolvimento com 5 equipes, totalizando cerca de 40 desenvolvedores. Estamos seguindo a metodologia Scrum, com sprints de 3 semanas. Temos uma configuração de integração contínua (Jenkins), com um pipeline de construção que leva várias horas (devido a extensos testes automatizados). Basicamente, o processo de desenvolvimento funciona bem.
No entanto, observamos que, depois de alguns dias em um novo sprint, nossa compilação geralmente fica instável e permanece instável até o final do sprint "parar de confirmar". O efeito adverso disso é que as etapas de compilação estão muito abaixo do pipeline, especialmente os testes de interface do usuário / Web não são executados por vários dias (porque são acionados apenas em uma compilação 'verde'). Consequentemente, os erros recém-introduzidos geralmente são detectados apenas muito tarde no sprint.
- Cada confirmação é verificada em relação a um conjunto básico de testes. Uma vez verificada, a alteração é enviada para mestre após uma revisão de código (Gerrit)
- Os testes básicos de unidade são executados a cada 30 minutos, duração inferior a 10 minutos
- Os testes de integração são executados a cada 2h, duração 1h
- Os testes de interface do usuário / Web são executados em testes de integração bem-sucedidos, com duração de várias horas
Dependendo de quem é responsável pela estabilidade da compilação durante o sprint (essa responsabilidade é repassada por cada sprint), pode haver "paradas de confirmação" ad-hoc intermediárias para que a compilação volte a ficar estável.
Então, nós queremos:
- Nossas equipes de desenvolvimento desenvolvem e cometem alterações durante um sprint sem obstáculos
- Nosso processo de construção é abandonado se uma etapa da construção falhar, pois os resultados subsequentes da construção têm pouco significado
- Nosso processo de criação para fornecer aos desenvolvedores um feedback de qualidade em tempo hábil
Dado (2), os pontos (1) e (3) parecem contradizer-se. Alguém tem uma boa prática de como lidar com isso?
( No momento, estamos perdendo o ponto (2) e permitindo a continuação da compilação, mesmo em etapas com falha na compilação. Ainda não tenho nenhum comentário sobre como isso influencia nossa qualidade )
Obrigado Simon
several hours
, esse é o verdadeiro problema. significa que a solução combinada é muito grande e muito ampla. Você deve procurar componenteizar a solução e, em seguida, ter pequenos blocos de código como pacotes (disponíveis de uma maneira ou de outra nos principais idiomas de todas as plataformas). Portanto, quaisquer alterações serão inseridas apenas nos componentes e serão detectadas muito mais rapidamente. A compilação completa basicamente unirá os componentes já combinados e também será mais rápida. Você só executaria possivelmente alguns testes para garantir que os componentes certos fossem resolvidos.