2011-12-14 8 views
39

Jestem nowy dla Jenkinsa i nie jestem pewien, czy jest to możliwe, ale chciałbym skonfigurować interfejs sieciowy, w którym ktoś mógłby kliknąć "Rozpocznij pracę", a to powie Jenkinsowi, aby rozpoczął konkretne dzieło budowania.Wzywając jenkinsa budujesz z poza jenkins?

Czy Jenkins ma usługę sieciową, która pozwala na takie rzeczy? Jeśli tak, czy ktoś mógłby mi polecić lub opublikować prosty przykład?

+0

Czy jesteś w stanie rozwiązać ten problem, muszę zrobić to samo, czy możesz dać mi znać, jak posortowałeś ten przykładowy kod lub linki .. – Sam

+0

Tak, to jest rzeczywiście proste. Podobnie jak w zaznaczonej odpowiedzi, wywołujesz adres URL w postaci JENKINS_URL/job/JOBNAME/build? Token = TOKEN Ustawiasz token podczas konfigurowania zadania. – chaimp

+0

W jaki sposób przekazać parametr, taki jak mvn, za pomocą linii poleceń .. – Sam

Odpowiedz

36

Oto link do dokumentacji: Jenkins Remote Access API.

Sprawdź sekcję Przesyłanie zleceń.

W konfiguracji zadania ustawia się token, a następnie tworzy się żądanie POST do . To prawdopodobnie najbardziej podstawowe użycie.

+1

Myślę, że powinno to być POST, a nie GET, aby przesłać kompilację. –

+4

To było trudne do znalezienia (patrz [1]), ale aby ustawić TOKEN musisz sprawdzić "Zdalne budowanie zdalnie (np. Ze skryptów)" pod " Buduj wyzwalacze "w swojej pracy z Jenkinsem. [1] https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build#ParameterizedBuild-Launchingabuildwithparameters –

2

Jenkins ma udokumentowane API REST. Możesz sprawić, że twoja mała usługa internetowa go wywoła.

+0

Dzięki za pomoc.Szukałem właśnie tego: http: // YOURHOST/jenkins/job/PROJECTNAME/build – chaimp

+0

Znalazłem to w dokumentacji Jenkinsa, ale zaznaczę, że jesteś poprawną odpowiedzią, ponieważ przynajmniej odpowiada, że ​​jest to możliwe. – chaimp

7

Aha, znaleziono go w dokumentacji. Tak prosty: http://YOURHOST/jenkins/job/PROJECTNAME/build

+0

W łączu zastąp "YOURHOST" nazwą hosta (np. Localhost lub www.mywebserver.com itd.) I zastąp "PROJECTNAME" nazwą projektu. – chaimp

+0

W takim przypadku nie trzeba nawet ustawiać tokena (ale jest to zalecane dla bezpieczeństwa). – chaimp

4

Istnieje dobra próbka użycia powyższego API z Pythona. Projekt o nazwie Python Jenkins można znaleźć tutaj: link

21

Jenkins obsługuje również sparametryzowaną kompilację.

Tak więc, jeśli chcesz przekazać parametry konfigurowalnego generowania kompilacji, możesz przekazać je, publikując je podczas wywoływania żądania budowania Jenkinsa z http: // YOURHOST/jenkins/job/PROJECTNAME/buildWithParameters.

+0

To jest dokładnie to, czego potrzebowałem. Dokument mówi, aby przekazać parametry, które trzeba wysłać JSON, ale ciągle otrzymuję komunikat o błędzie z informacją, że oczekuje podania formularza. Używanie parametrów buildWithParameters zadziałało. – DSoa

+0

@DSoa Powinieneś głosować na odpowiedź, jeśli to pomogło. – Apurv

+3

To jest już spóźniona, ale miałem te same problemy i okazało się, że POST/build oczekuje, jak mówisz, typu content: x-www-form-urlencoded, aw ciele powinien być pojedynczy klucz o nazwie "json", a rzeczywisty json jako wartość. Próba POST z typem zawartości: application/json i faktycznym jsonem w treści, renderuje wyjątek serwletu. Wygląda na to, że Jenkins ma własny sposób radzenia sobie z JSON-em ... – JHH

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

zestaw tokenu w konfiguracji pracy/build triggers/Trigger builds zdalnie.

0

z zwinięcie Jeśli istnieje wiele argumentów, aby przekazać jak token i parametr może trzeba zacytować na Linux powłoki:

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

Musiałem dodać parametry i chciałem to zrobić za pośrednictwem protokołu HTTPS. Zajęło mi trochę czasu, ale dla mnie zadziałało:

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' 
Powiązane problemy