Come menzionato in "Il polling deve morire: innescare build Jenkins da un hook git ", è possibile informare Jenkins di un nuovo commit:
Con l'ultimo plugin Git 1.1.14 (che ho appena rilasciato ora), ora puoi farlo di più> facilmente semplicemente eseguendo il seguente comando:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
Questo eseguirà la scansione di tutti i lavori configurati per verificare l'URL specificato e, se sono anche configurati con il polling, attiverà immediatamente il polling (e se trova una modifica degna di una build, una build verrà attivata a sua volta. )
Ciò consente a una sceneggiatura di rimanere la stessa quando i lavori vanno e vengono in Jenkins.
Oppure, se si dispone di più repository in un'unica applicazione host di repository (come Gitosis), è possibile condividere un singolo script hook post-ricezione con tutti i repository. Infine, questo URL non richiede autenticazione anche per Jenkins sicuro, poiché il server non utilizza direttamente tutto ciò che il client sta inviando. Esegue il polling per verificare la presenza di una modifica, prima che inizi effettivamente una generazione.
Come menzionato qui , assicurati di utilizzare l'indirizzo giusto per il tuo server Jenkins:
poiché stiamo eseguendo Jenkins come server Web standalone sulla porta 8080, l'URL avrebbe dovuto essere privo di /jenkins
, in questo modo:
http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git
Per rafforzare l'ultimo punto, ptha aggiunge nei commenti :
Può essere ovvio, ma ho avuto problemi con:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>.
Il parametro url deve corrispondere esattamente a quello che hai nell'URL del repository del tuo lavoro Jenkins.
Quando ho copiato degli esempi ho lasciato fuori il protocollo, nel nostro caso ssh://
, e non ha funzionato.
Puoi anche usare un semplice hook post-ricezione come in " Build basati su push usando Jenkins e GIT "
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
Configurare il lavoro Jenkins per essere in grado di "Attivare build in remoto" e utilizzare un token di autenticazione ( 1qaz2wsx
in questo esempio).
Tuttavia, questo è uno script specifico del progetto e l'autore menziona un modo per generalizzarlo.
La prima soluzione è più semplice in quanto non dipende dall'autenticazione o da un progetto specifico.
Voglio controllare il set di modifiche se almeno un file java è lì, la build dovrebbe iniziare.
Supponiamo che gli sviluppatori abbiano modificato solo i file XML o i file delle proprietà, quindi la generazione non dovrebbe iniziare.
Fondamentalmente, il tuo script di build può:
- metti un "build" note (vedi
git notes
) alla prima chiamata
- sulle chiamate successive, afferrare l'elenco dei commit tra
HEAD
di vostro candidato ramo per costruire e il commit fa riferimento il git notes
'build' ( git show refs/notes/build
): git diff --name-only SHA_build HEAD
.
- lo script può analizzare tale elenco e decidere se deve continuare con la build.
- in ogni caso, crea / sposta il tuo
git notes
' build
' in HEAD
.
Maggio 2016: cwhsu sottolinea nei commenti il seguente url possibile:
potresti usarlo solo curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
se imposti la configurazione trigger nel tuo oggetto
Giugno 2016, polaretto sottolinea nei commenti :
Volevo aggiungere che con solo un po 'di scripting della shell puoi evitare la configurazione manuale dell'URL, specialmente se hai molti repository in una directory comune.
Ad esempio ho usato queste espansioni di parametri per ottenere il nome del repository
repository=${PWD%/hooks};
repository=${repository##*/}
e poi usalo come:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository