Estou no processo de conversão de vários repositórios em um único repositório. Nossa ferramenta de CI de escolha é o Jenkins devido à conversão de várias estruturas de repositório em um único problema.
Os tempos de construção / teste aumentaram significativamente, pois todas as construções / testes precisam ser executadas para cada confirmação única. Isso é parcialmente aliviado pelo uso de uma ferramenta de compilação; no nosso caso, continuamos usando Buck.
Depois que todos os testes associados ao código confirmado são executados, eu tenho um Jenkinsfile de implantação para cada projeto. Como poderei acionar apenas os arquivos Jenkins para projetos que precisam ser reimplantados? E se eu sou capaz de fazer isso, essa é uma prática correta ?
fonte
Respostas:
Obtenha uma lista de arquivos alterados e use-a para determinar quais testes executar.
Carregue scripts Groovy externos em tempo de execução para executar suas implantações.
fonte
Você pode usar o bloco " when " combinado com a condição "changeset" incorporada para executar condicionalmente apenas determinados estágios do pipeline do seu monorepo. Na documentação when.changeset:
changeset - Executa o estágio se o changeset do SCM da compilação contiver um ou mais arquivos correspondentes à string ou glob especificados. Exemplo: quando {changeset "** / *. Js"}
Aqui está um exemplo do Jenkinsfile usando esta estratégia:
, aplicável à estrutura do projeto monorepo mostrada abaixo:
Essa estratégia não ultrapassará pequenas bases de código, porque seria difícil acompanhar quais módulos dependem um do outro. Você estaria melhor usando um sistema de compilação como o Bazel. Seu trabalho de IC simplesmente emitia uma compilação do bazel // ... (compila tudo), e o Bazel calculava o que realmente precisa ser construído e o que precisa ser testado. Além disso, existem ainda regras do bazel, como rules_docker e rules_k8s, que podem calcular quais contêineres precisam ser reconstruídos e enviados a um registro de contêineres e quais aplicativos precisam ser reimplantados no Kubernetes.
fonte