I am trying to use the jenkins rest api. In the instructions it says I need to have the api key. I have looked all over the configuration pages to find it. How do i get the API key for jenkins?
3 Answers
Since Jenkins 2.129 the API token configuration has changed:
You can now have multiple tokens and name them. They can be revoked individually.
- Log in to Jenkins.
- Click you name (upper-right corner).
- Click Configure (left-side menu).
- Use "Add new Token" button to generate a new one then name it.
- You must copy the token when you generate it as you cannot view the token afterwards.
- Revoke old tokens when no longer needed.
Before Jenkins 2.129: Show the API token as follows:
- Log in to Jenkins.
- Click your name (upper-right corner).
- Click Configure (left-side menu).
- Click Show API Token.
The API token is revealed.
You can change the token by clicking the Change API Token button.
- 8,358
- 2
- 31
- 34
-
3
-
4
-
-
1
-
1FYI. On Jenkins 2.150.1 the "Add new Token" button doesn't seem to appear until at least one token exists. Please check @RaGe's answer for how to do it without the UI. – m__ Nov 14 '19 at 12:41
The non UI way to do this post Jenkins 2.129 is:
curl 'https://<jenkinsURL>/me/descriptorByName/jenkins.security.ApiTokenProperty/generateNewToken' \
--data 'newTokenName=foo' \
--user username:Password
which returns:
{
"status": "ok",
"data": {
"tokenName": "foo",
"tokenUuid": "<uuid>",
"tokenValue": "<redacted>"
}
}
Pre Jenkins 2.129
curl http://<username>:<password>@<jenkins-url>/me/configure
- 21,202
- 11
- 63
- 97
-
2You need to include the CSRF crumb (https://wiki.jenkins.io/display/JENKINS/Remote+access+API) in your curl request, else it will fail with 403:Forbidden. – MKesper Sep 09 '19 at 13:59
-
What if username is name@domain.com, we have enabled single sign on in jenkins server – SibiCoder Jan 31 '20 at 10:23
-
2
Tested in Jenkins 2.225
After making research for several hours I could find the answer:
Api Token is used instead of CSFR token. However, what happens if you want to make authentication from any other client(POSTMAN, CLI. curl, etc).
First you need to get a CSFR token and save the information in a cookie with --cookie-jar
- REQUEST
curl -s --cookie-jar /tmp/cookies -u username:password http://localhost:8080/crumbIssuer/api/json
- RESPONSE
{ "_class": "hudson.security.csrf.DefaultCrumbIssuer", "crumb": "bc92944100d12780cfc251c9255f3f323a475562b4ee0d8b9cc6e4121f50a450", "crumbRequestField": "Jenkins-Crumb" }
Then we can read the cookie with --cookie and generate the new token:
- REQUEST
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 username:password
- RESPONSE
{ "status": "ok", "data": { "tokenName": "my android token", "tokenUuid": "c510e26c-b2e8-4021-bf79-81d1e4c112af", "tokenValue": "11a2a0c91913d1391d8e8cb155ca714581" } }
- 438
- 6
- 13
-
It was necessary for me to add `-H "Content-Length: 0"` to the cURL request, but otherwise this worked for me. – phantom-99w Mar 26 '21 at 07:50