2011-12-14 14 views
39

Sono nuovo di Jenkins e non sono sicuro che sia possibile, ma vorrei creare un'interfaccia web in cui qualcuno potrebbe fare clic su "Inizia lavoro" e questo dirà a Jenkins di iniziare un particolare lavoro di costruzione.Chiamare un jenkins costruito fuori dal jenkins?

Jenkins dispone di un servizio Web che consentirebbe una cosa del genere? In tal caso, qualcuno potrebbe indicarmi o pubblicare un semplice esempio?

+0

Sei riuscito a risolvere questo? Devo fare la stessa cosa, puoi per favore fammi sapere come hai risolto questo codice di esempio o link .. – Sam

+0

Sì, è in realtà semplice. Proprio come dice la risposta selezionata, si chiama un URL nel formato JENKINS_URL/job/JOBNAME/build? Token = TOKEN Si imposta il token durante l'impostazione del lavoro. – chaimp

+0

come faccio a passare il parametro come mvn arvioni da riga di comando .. – Sam

risposta

36

Questo è un collegamento alla documentazione: Jenkins Remote Access API.

Controllare la sezione Lavori di invio.

Nella configurazione del lavoro si configura un token e quindi si crea una richiesta POST su JENKINS_URL/job/JOBNAME/build?token=TOKEN. Questo è probabilmente l'utilizzo più basilare.

+1

Penso che dovrebbe essere un POST piuttosto che un GET per inviare una build –

+4

Questo è stato difficile da trovare (vedi [1]) ma per impostare il TOKEN è necessario selezionare "Trigger build in remoto (ad esempio, da script)" in " Costruisci Trigger "nel tuo lavoro di Jenkins. [1] https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build#ParameterizedBuild-Launchingabuildwithparameters –

2

Jenkins ha un'API REST documentata. Puoi fare in modo che il tuo piccolo servizio web lo invochi.

+0

Grazie per l'aiuto.Stavo cercando specificamente questo: http: // YOURHOST/jenkins/job/PROJECTNAME/build – chaimp

+0

Trovato nella documentazione di jenkins, ma contrassegnerò la risposta come corretta, dal momento che almeno risponde che è possibile. – chaimp

7

Aha, trovato nella documentazione. Semplice: http://YOURHOST/jenkins/job/PROJECTNAME/build

+0

Nel link, sostituire "YOURHOST" con il nome host (ad esempio localhost o www.mywebserver.com, ecc.) E sostituire "PROJECTNAME" con il nome del progetto. – chaimp

+0

In questo caso, non è nemmeno necessario impostare un token (ma è consigliato per motivi di sicurezza). – chaimp

4

C'è un buon esempio di utilizzo dell'API di Python. Il progetto si chiama Python Jenkins e potresti trovarlo qui: link

21

Jenkins ha anche il supporto per la generazione parametrizzata.

Quindi, se si vuole passare i parametri per la generazione di compilazione configurabile, è possibile passarli inviando mentre invocando Jenkins costruire richiesta con http: // YOURHOST/Jenkins/Lavoro/PROJECTNAME/buildWithParameters.

+0

Questo è esattamente ciò di cui avevo bisogno. Il doc dice di passare i parametri necessari per inviare JSON, ma continuavo a ricevere un errore che diceva che prevedeva l'invio di un modulo. L'utilizzo di buildWithParameters ha funzionato. – DSoa

+0

@DSoa Dovresti votare la risposta, se ti è stato d'aiuto. – Apurv

+3

Questo è decisamente in ritardo, ma stavo avendo gli stessi problemi, e si è scoperto che POST/build si aspetta, come dici tu, content-type: x-www-form-urlencoded, e nel corpo dovrebbe esserci una singola chiave chiamato "json", con il json effettivo come valore. Provare a POST con content-type: application/json e json effettivo nel corpo renderà un'eccezione servlet. Jenkins sembra avere il suo modo di trattare con JSON in effetti ... – JHH

1
curl -H POST http://USERNAME:[email protected]_HOST:PORT/job/JOB_NAME/build?token=YOUR_TOKEN 

Set gettone al momento della configurazione di lavoro/build trigger/build trigger in remoto.

0

con curl, se si dispone di più argomenti da passare come un token e un parametro potrebbe essere necessario citare su shell Linux:

curl -H POST "http://USERNAME:[email protected]_HOST:PORT/job/JOB_NAME/build?token=YOUR_TOKEN&PARAMETER=VALUE" 
3

avevo bisogno di aggiungere i parametri e volevo farlo più https. Mi ci è voluto un po 'di tempo ma il seguente ha funzionato per me:

curl --request POST --url 'https://HOST_NAME/job/JOB_NAME/buildWithParameters?token=TOKEN' --header 'cache-control: no-cache' --header 'content-type: application/x-www-form-urlencoded' --data 'name1=value1&name2=value2'