Come accennato in "Polling must die: triggering Jenkins builds from a git hook", è possibile notificare Jenkins di un nuovo impegno:
Con l'ultima Git plugin 1.1.14 (che ho appena rilascio ora), ora è possibile farlo più> facilmente semplicemente eseguendo il seguente comando:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
Questa la scansione di tutti i posti di lavoro che è configurato per controllare l'URL specificato, e se sono anche configurati con sondaggi, sarà innescare immediatamente il polling (e se questo trova un cambiamento vale la pena build, una build verrà attivata a turno.)
Ciò consente a uno script di rimanere lo stesso quando i lavori vanno e vengono in Jenkins.
Oppure se si dispone di più repository in un'unica applicazione host di repository (ad esempio Gitosis), è possibile condividere un singolo script di hook di post-ricezione con tutti i repository. Infine, questo URL non richiede l'autenticazione nemmeno per Jenkins protetto, perché il server non utilizza direttamente nulla che il client sta inviando. Esegue il polling per verificare che vi sia un cambiamento, prima che inizi effettivamente una build.
Come mentioned here, assicurarsi di utilizzare l'indirizzo giusto per il server Jenkins:
dal momento che stiamo correndo Jenkins come Webserver autonomo sulla porta 8080 l'URL avrebbe dovuto essere senza il /jenkins
, come questo :
http://jenkins:8080/git/[email protected]:tools/common.git
a rafforzare tale ultimo punto, ptha aggiunge in the comments:
Potrebbe 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 quello che hai in URL Repository del vostro lavoro Jenkins.
Quando si copia esempi che ho lasciato fuori il protocollo, nel nostro caso ssh://
, e non ha funzionato.
È inoltre possibile utilizzare un semplice post-ricezione gancio come in "Push based builds using Jenkins and GIT"
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
configurare il vostro lavoro Jenkins per essere in grado di “Trigger costruisce a distanza” e utilizzare l'autenticazione token (1qaz2wsx
in questo esempio).
Tuttavia, questo è uno script specifico del progetto e l'autore cita un modo per generalizzarlo.
La prima soluzione è più semplice in quanto non dipende autenticazione o un progetto specifico.
voglio controllare nel cambiamento impostare se almeno un file java c'è la build dovrebbe iniziare.
Supponiamo gli sviluppatori modificati solo i file XML o file di proprietà, quindi la build non dovrebbe iniziare.
In sostanza, il vostro script di build può:
- mettere un note 'build' (vedi
git notes
) in prima convocazione
- sulle chiamate successive, afferrare l'elenco dei commit tra
HEAD
della vostra ramo candidato per accumulo e il commit riferimento dal git notes
'costruire' (git show refs/notes/build
): git diff --name-only SHA_build HEAD
.
- lo script può analizzare questa lista e decidere se ha bisogno di andare avanti con la compilazione.
- in ogni caso, creare/spostare il
git notes
'build
' a HEAD
.
maggio 2016: cwhsu punti su in the comments il seguente possibile url:
si potrebbe utilizzare curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
se si imposta grilletto config nella vostra voce
giugno 2016, polaretto punti su in the comments:
volevo aggiungere che, con solo un po 'di scripting di shell è possibile evitare la configurazione manuale url, specialmente se si hanno molti repository in una directory comune.
Per esempio ho usato queste espansioni di parametri per ottenere il nome repo
repository=${PWD%/hooks};
repository=${repository##*/}
e quindi utilizzarlo come:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository
Ho modificato la mia risposta per rispondere alla seconda parte della domanda. – VonC