Como faço para dizer ao Jenkins / Hudson para acionar uma construção apenas para mudanças em um projeto específico em minha árvore Git?
87
O plugin Git tem uma opção (região excluída) para usar regexes para determinar se deve pular a construção com base em se os arquivos no commit correspondem ao regex da região excluída.
Infelizmente, o plugin Git padrão não tem um recurso de "região incluída" no momento (1.15). No entanto, alguém postou patches no GitHub que funcionam no Jenkins e no Hudson e implementam o recurso que você deseja.
É um pouco trabalhoso de construir, mas funciona como anunciado e tem sido extremamente útil, pois uma das minhas árvores Git tem vários projetos independentes.
https://github.com/jenkinsci/git-plugin/pull/49
Atualização: O plugin Git (1.16) agora tem o recurso de região 'incluído'.
Ignored commit c6e2b1dca0d1885: No paths matched included region whitelist
. Qualquer pista? Mais detalhes aqui: stackoverflow.com/questions/47439042/…Basicamente, você precisa de dois empregos. Um para verificar se os arquivos foram alterados e outro para fazer a compilação real:
Trabalho # 1
Isso deve ser acionado em mudanças em seu repositório Git. Em seguida, testa se o caminho que você especifica ("src" aqui) tem alterações e usa a CLI do Jenkins para acionar um segundo trabalho.
Trabalho # 2
Configure este trabalho para receber um parâmetro GIT_REVISION como este, para ter certeza de que está construindo exatamente a revisão que o primeiro trabalho escolheu construir.
fonte
$? || exit 0
...test $? -eq 0 || exit 0
talvez?Se você estiver usando uma sintaxe declarativa de Jenkinsfile para descrever o pipeline de construção, poderá usar a condição do changeset para limitar a execução do estágio apenas para o caso em que arquivos específicos são alterados. Este agora é um recurso padrão do Jenkins e não requer nenhuma configuração / software adicional.
Você pode combinar várias condições usando
anyOf
ouallOf
palavras - chave para comportamento OR ou AND de acordo:fonte
Embora isso não afete jobs individuais, você pode usar este script para ignorar certas etapas se o commit mais recente não contiver nenhuma alteração:
fonte
api/
pasta.) Se você pudesse corrigir isso, eu adoraria uma alteração sugerida !Se a lógica para escolher os arquivos não for trivial, eu acionaria a execução do script em cada mudança e, em seguida, escreveria um script para verificar se de fato uma construção é necessária e, em seguida, acionaria uma construção se for.
fonte
Você pode usar o plug-in do acionador do Webhook genérico para isso.
Com uma variável like
changed_files
e expression$.commits[*].['modified','added','removed'][*]
.Você pode ter um texto de filtro
$changed_files
e um regexp de filtro como"folder/subfolder/[^"]+?"
sefolder/subfolder
for a pasta que deve acionar as compilações.fonte
Eu respondi a essa pergunta em outro post:
Como obter uma lista de arquivos alterados desde a última compilação no Jenkins / Hudson
Você pode adicionar a verificação diretamente ao topo do shell exec da tarefa, e isso acontecerá
exit 0
se nenhuma alteração for detectada ... Portanto, você sempre pode pesquisar o nível superior para verificações para acionar uma compilação.fonte
Escrevi este script para pular ou executar testes se houver alterações:
Então você pode fazer algo como:
./scripts/git-run-if-changed.sh cmd vendor go.mod go.sum fixtures/ tools/ -- go test
fonte