Como acionar uma compilação remotamente do Jenkins?
Como configurar o Git post commit hook?
Meu requisito é que, sempre que forem feitas alterações no repositório Git para um projeto específico, ele iniciará automaticamente a construção do Jenkins para esse projeto.
Na seção Jenkins gatilho, selecionei gatilho remotamente.
No .git
diretório, o diretório hooks existe, pois precisamos configurar o arquivo post commit.
Estou confuso como acionar uma compilação a partir daí (sei que alguma parte devemos usar o comando curl).
curl cmbuild.aln.com/jenkins/view/project name/job/myproject/buildwithparameters?Branch=feat-con
Eu coloquei esse comando no diretório de ganchos do servidor git (gancho de confirmação de postagem).
Sempre que as alterações ocorrem no repositório, ele está executando a compilação automatizada.
Quero verificar no changeset se em pelo menos um arquivo java existe a compilação deve começar.
Suponha que os desenvolvedores tenham alterado apenas arquivos xml ou arquivos de propriedades que a construção não deve iniciar.
Junto com xml
, suponha que os .java
arquivos estejam lá, a construção deve começar.
Respostas:
Como mencionado em "A pesquisa deve morrer: acionando o Jenkins constrói a partir de um gancho git ", você pode notificar Jenkins sobre um novo commit:
Conforme mencionado aqui , certifique-se de usar o endereço correto para o servidor Jenkins:
Para reforçar esse último ponto, o ptha acrescenta nos comentários :
Você também pode usar um gancho simples de pós-recebimento, como em " Builds baseadas em push usando Jenkins e GIT "
No entanto, este é um script específico do projeto, e o autor menciona uma maneira de generalizá-lo.
A primeira solução é mais fácil, pois não depende de autenticação ou de um projeto específico.
Basicamente, seu script de construção pode:
git notes
) na primeira chamadaHEAD
de seu candidato ramo de construção e o commit referenciado pelogit notes
'construir' (git show refs/notes/build
):git diff --name-only SHA_build HEAD
.git notes
'build
' paraHEAD
.Maio de 2016: cwhsu aponta nos comentários o seguinte URL possível:
Em junho de 2016, polaretto aponta nos comentários :
fonte
yourRepo.git/hooks/post-receive
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
. O parâmetro url deve corresponder exatamente ao que você tem no URL do repositório do seu trabalho Jenkins. Ao copiar exemplos, deixei de fora o protocolo, no nosso caso, ssh: // e não funcionou.Espero que isso ajude: http://nrecursions.blogspot.in/2014/02/how-to-trigger-jenkins-build-on-git.html
É apenas uma questão de usar
curl
para acionar um trabalho Jenkins usando os ganchos do git fornecidos pelo git.O comando
pode executar um trabalho Jenkins, onde
someJob
é o nome do trabalho Jenkins.Procure a
hooks
pasta na sua pasta .git oculta. Renomeie opost-commit.sample
arquivo parapost-commit
. Abra-o com o bloco de notas, remova a: Nothing
linha e cole o comando acima.É isso aí. Sempre que você faz uma confirmação, o Git aciona os comandos pós-confirmação definidos no arquivo.
fonte
Como a resposta anterior mostrou um exemplo de como o gancho completo pode parecer, aqui está o código do meu gancho pós-recebimento de trabalho:
Nesse caso, aciono trabalhos de Jenkins apenas quando pressiono para mestre e não para outros ramos.
fonte
Quero acrescentar às respostas acima que se tornará um pouco mais difícil se a autorização do Jenkins estiver ativada.
Depois de ativá-lo, recebi uma mensagem de erro informando que o usuário anônimo precisa de permissão de leitura.
Vi duas soluções possíveis:
1: Alterando meu gancho para:
2: definindo autorização baseada em projeto.
As soluções anteriores têm a desvantagem de expor minha senha no arquivo do gancho. Inaceitável no meu caso.
O segundo funciona para mim. Nas configurações globais de autenticação, tive que ativar o usuário Geral> Ler para Anônimo. No projeto que eu queria acionar, tive que ativar Trabalho> Compilar e Trabalho> Ler para Anônimo.
Essa ainda não é uma solução perfeita, porque agora você pode ver o projeto no Jenkins sem login. Pode haver uma solução ainda melhor usando a abordagem anterior com o login http, mas ainda não descobri.
fonte