Jak uzyskać token API dla Jenkins

86

Próbuję użyć interfejsu API Jenkins Rest. W instrukcjach jest napisane, że muszę mieć klucz interfejsu API. Przeszukałem wszystkie strony konfiguracyjne, aby go znaleźć. Jak uzyskać klucz API dla Jenkins?

Łukasza 101
źródło
Jeśli chcesz tego samego programistycznie, możesz
rzucić

Odpowiedzi:

139

Od wersji Jenkins 2.129 konfiguracja tokena API uległa zmianie :

Możesz teraz mieć wiele tokenów i nadawać im nazwy. Można je odwołać indywidualnie.

  1. Zaloguj się do Jenkins.
  2. Kliknij swoje imię (prawy górny róg).
  3. Kliknij Konfiguruj (menu po lewej stronie).
  4. Użyj przycisku „Dodaj nowy token”, aby wygenerować nowy, a następnie nazwij go.
  5. Musisz skopiować token podczas generowania go, ponieważ później nie możesz go wyświetlić.
  6. Odwołaj stare żetony, gdy nie są już potrzebne.

Przed Jenkins 2.129: Pokaż token API w następujący sposób:

  1. Zaloguj się do Jenkins.
  2. Kliknij swoje imię (prawy górny róg).
  3. Kliknij Konfiguruj (menu po lewej stronie).
  4. Kliknij Pokaż token API .

Ujawniono token API.

Możesz zmienić token, klikając przycisk Zmień token API .

Brian Walker
źródło
2
czy jest jakiś interfejs API, aby to uzyskać?
Madhu Avinash
2
czy ten token straci ważność?
ndh103
Show API Tokenwydaje się, że już nie obowiązuje.
Saikat
1
@MadhuAvinash Zobacz moją odpowiedź poniżej
RaGe
FYI. W Jenkins 2.150.1 przycisk „Dodaj nowy token” nie pojawia się, dopóki nie istnieje co najmniej jeden token. Sprawdź odpowiedź @ RaGe, aby dowiedzieć się, jak to zrobić bez interfejsu użytkownika.
m__
17

Sposób wykonania tego postu Jenkins 2.129 bez interfejsu użytkownika to:

curl 'https://<jenkinsURL>/me/descriptorByName/jenkins.security.ApiTokenProperty/generateNewToken' \
--data 'newTokenName=foo' \
--user username:Password

która zwraca:

{
  "status": "ok",
  "data": {
    "tokenName": "foo",
    "tokenUuid": "<uuid>",
    "tokenValue": "<redacted>"
  }
}

Pre Jenkins 2.129.1

curl http://<username>:<password>@<jenkins-url>/me/configure 
Wściekłość
źródło
2
Musisz dołączyć crumb CSRF ( wiki.jenkins.io/display/JENKINS/Remote+access+API ) w swoim żądaniu curl, w przeciwnym razie nie powiedzie się z 403: Forbidden.
MKesper
Co jeśli nazwa użytkownika to [email protected],
włączyliśmy
2
@SibiCoder Spróbuj zamienić „@” na „% 40”
Tim Kist
1

Przetestowano w Jenkins 2.225

Po kilku godzinach poszukiwań mogłem znaleźć odpowiedź:

Zamiast tokena CSFR używany jest token API. Jednak co się stanie, jeśli chcesz dokonać uwierzytelnienia z dowolnego innego klienta (POSTMAN, CLI, curl, itp.).

Najpierw musisz zdobyć token CSFR i zapisać informacje w pliku cookie z rozszerzeniem --cookie-jar

  • ŻĄDANIE

curl -s --cookie-jar / tmp / cookies -u nazwa użytkownika: hasło http: // localhost: 8080 / crumbIssuer / api / json

  • ODPOWIEDŹ

{"_class": "hudson.security.csrf.DefaultCrumbIssuer", "crumb": "bc92944100d12780cfc251c9255f3f323a475562b4ee0d8b9cc6e4121f50a450", "crumbRequestField": "CrumbRequestField": "

Następnie możemy odczytać plik cookie --cookiei wygenerować nowy token:

  • ŻĄDANIE

curl -X POST -H 'Jenkins-Crumb: your_crumb_token_generated_above' --cookie / tmp / cookies http: // localhost: 8080 / me / descriptorByName / jenkins.security.ApiTokenProperty / generationNewToken? newTokenName = \ your_token_name -u username: password

  • ODPOWIEDŹ

{"status": "ok", "data": {"tokenName": "mój token Androida", "tokenUuid": "c510e26c-b2e8-4021-bf79-81d1e4c112af", "tokenValue": "11a2a0c91913d1391d8ca8cb155}

Carlos Leonardo Camilo Vargas
źródło