Cómo obtener el token de API para Jenkins

86

Estoy tratando de usar la API rest de jenkins. En las instrucciones dice que necesito tener la clave api. He buscado en todas las páginas de configuración para encontrarlo. ¿Cómo obtengo la clave API para jenkins?

Luke101
fuente
Si desea lo mismo mediante programación, puede echar un vistazo a Recuperar mediante programación el token de API REST de Jenkins
footyapps27 de

Respuestas:

139

Desde Jenkins 2.129, la configuración del token de API ha cambiado :

Ahora puede tener varios tokens y nombrarlos. Pueden revocarse individualmente.

  1. Inicie sesión en Jenkins.
  2. Haga clic en su nombre (esquina superior derecha).
  3. Haga clic en Configurar (menú del lado izquierdo).
  4. Use el botón "Agregar token nuevo" para generar uno nuevo y luego asígnele un nombre.
  5. Debe copiar el token cuando lo genere, ya que no podrá verlo posteriormente.
  6. Revoca las fichas antiguas cuando ya no las necesites.

Antes de Jenkins 2.129: muestre el token de API de la siguiente manera:

  1. Inicie sesión en Jenkins.
  2. Haga clic en su nombre (esquina superior derecha).
  3. Haga clic en Configurar (menú del lado izquierdo).
  4. Haga clic en Mostrar token de API .

Se revela el token de API.

Puede cambiar el token haciendo clic en el botón Cambiar token de API .

Brian Walker
fuente
2
¿Hay alguna API para conseguir eso?
Madhu Avinash
2
¿Caducará este token?
ndh103
Show API Tokenya no es válido, parece.
Saikat
1
@MadhuAvinash Vea mi respuesta a continuación
RaGe
FYI. En Jenkins 2.150.1, el botón "Agregar nuevo token" no parece aparecer hasta que exista al menos un token. Consulte la respuesta de @ RaGe para saber cómo hacerlo sin la interfaz de usuario.
m__
17

La forma sin interfaz de usuario de hacer esta publicación Jenkins 2.129 es:

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

que devuelve:

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

Pre Jenkins 2.129

curl http://<username>:<password>@<jenkins-url>/me/configure 
Rabia
fuente
2
Debe incluir la miga de CSRF ( wiki.jenkins.io/display/JENKINS/Remote+access+API ) en su solicitud de curl, de lo contrario fallará con 403: Forbidden.
MKesper
¿Qué pasa si el nombre de usuario es [email protected], hemos habilitado el inicio de sesión único en el servidor jenkins
SibiCoder
2
@SibiCoder Intente reemplazar '@' con '% 40'
Tim Kist
1

Probado en Jenkins 2.225

Después de investigar durante varias horas pude encontrar la respuesta:

Se usa Api Token en lugar del token CSFR. Sin embargo, ¿qué sucede si desea realizar la autenticación desde cualquier otro cliente (POSTMAN, CLI. Curl, etc)?

Primero debe obtener un token CSFR y guardar la información en una cookie con --cookie-jar

  • SOLICITUD

curl -s --cookie-jar / tmp / cookies -u nombre de usuario: contraseña http: // localhost: 8080 / crumbIssuer / api / json

  • RESPUESTA

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

Luego podemos leer la cookie --cookiey generar el nuevo token:

  • SOLICITUD

curl -X POST -H 'Jenkins-Crumb: your_crumb_token_generated_above' --cookie / tmp / cookies http: // localhost: 8080 / me / descriptorByName / jenkins.security.ApiTokenProperty / generateNewToken? newTokenName = \ your_token_name -u nombre de usuario: contraseña

  • RESPUESTA

{"status": "ok", "data": {"tokenName": "mi token de Android", "tokenUuid": "c510e26c-b2e8-4021-bf79-81d1e4c112af", "tokenValue": "11a2a0c91913d1391d8e814cb155ca7}}

Carlos Leonardo Camilo Vargas
fuente