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:
Com o mais recente plugin Git 1.1.14 (que acabei de lançar agora), agora você pode fazer isso com mais facilidade> simplesmente executando o seguinte comando:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
Isso varrerá todos os trabalhos configurados para verificar o URL especificado e, se eles também estiverem configurados com pesquisa, acionará imediatamente a pesquisa (e, se encontrar uma alteração que vale a pena construir, uma construção será acionada por sua vez. )
Isso permite que um script permaneça o mesmo quando os trabalhos entram e saem no Jenkins.
Ou, se você tiver vários repositórios em um único aplicativo host de repositório (como Gitosis), poderá compartilhar um único script de gancho pós-recebimento com todos os repositórios. Por fim, esse URL não requer autenticação, mesmo para o Jenkins protegido, porque o servidor não usa diretamente nada que o cliente esteja enviando. Ele executa a pesquisa para verificar se há uma alteração antes de realmente iniciar uma compilação.
Conforme mencionado aqui , certifique-se de usar o endereço correto para o servidor Jenkins:
como estamos executando o Jenkins como servidor da Web autônomo na porta 8080, o URL deveria estar sem o /jenkins
seguinte:
http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git
Para reforçar esse último ponto, o ptha acrescenta nos comentários :
Pode ser óbvio, mas tive problemas com:
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.
Você também pode usar um gancho simples de pós-recebimento, como em " Builds baseadas em push usando Jenkins e GIT "
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
Configure o seu trabalho Jenkins para poder "Trigger build remotamente" e usar um token de autenticação ( 1qaz2wsx
neste exemplo).
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.
Quero verificar no conjunto de alterações se pelo menos um arquivo java está lá, a compilação deve iniciar.
Suponha que os desenvolvedores tenham alterado apenas arquivos XML ou arquivos de propriedades; a construção não deve ser iniciada.
Basicamente, seu script de construção pode:
- coloque notas de 'build' (veja
git notes
) na primeira chamada
- nas chamadas subsequentes, pegue a lista de commits entre
HEAD
de seu candidato ramo de construção e o commit referenciado pelo git notes
'construir' ( git show refs/notes/build
): git diff --name-only SHA_build HEAD
.
- seu script pode analisar essa lista e decidir se precisa continuar com a compilação.
- em qualquer caso, crie / mova seu
git notes
' build
' para HEAD
.
Maio de 2016: cwhsu aponta nos comentários o seguinte URL possível:
você pode usar apenas curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
se definir a configuração do gatilho no seu item
Em junho de 2016, polaretto aponta nos comentários :
Eu queria acrescentar que, com apenas um pouco de script de shell, você pode evitar a configuração manual de URL, especialmente se você tiver muitos repositórios em um diretório comum.
Por exemplo, usei essas expansões de parâmetro para obter o nome do repositório
repository=${PWD%/hooks};
repository=${repository##*/}
e depois use-o como:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository