วิธีรับ API Token สำหรับ Jenkins


86

ฉันพยายามใช้ jenkins rest api ในคำแนะนำบอกว่าฉันต้องมีคีย์ api ฉันได้ดูหน้าการกำหนดค่าทั้งหมดเพื่อหามัน ฉันจะรับคีย์ API สำหรับเจนกินส์ได้อย่างไร


หากคุณต้องการแบบเดียวกันโดยใช้โปรแกรมคุณสามารถดูที่การดึงข้อมูล Jenkins REST API Token แบบเป็นโปรแกรมได้
footyapps27

คำตอบ:


141

ตั้งแต่ Jenkins 2.129 การกำหนดค่าโทเค็น API มีการเปลี่ยนแปลง :

ตอนนี้คุณสามารถมีโทเค็นหลายตัวและตั้งชื่อได้ สามารถเพิกถอนได้ทีละรายการ

  1. เข้าสู่ระบบ Jenkins
  2. คลิกชื่อคุณ (มุมขวาบน)
  3. คลิกกำหนดค่า (เมนูด้านซ้าย)
  4. ใช้ปุ่ม "เพิ่มโทเค็นใหม่" เพื่อสร้างโทเค็นใหม่จากนั้นตั้งชื่อ
  5. คุณต้องคัดลอกโทเค็นเมื่อคุณสร้างโทเค็นเนื่องจากคุณไม่สามารถดูโทเค็นได้ในภายหลัง
  6. เพิกถอนโทเค็นเก่าเมื่อไม่จำเป็นอีกต่อไป

ก่อน Jenkins 2.129: แสดงโทเค็น API ดังนี้:

  1. เข้าสู่ระบบ Jenkins
  2. คลิกชื่อของคุณ (มุมขวาบน)
  3. คลิกกำหนดค่า (เมนูด้านซ้าย)
  4. คลิกแสดง API Token

โทเค็น API ถูกเปิดเผย

คุณสามารถเปลี่ยนโทเค็นโดยคลิกที่เปลี่ยน API Tokenปุ่ม


2
มี api ที่จะได้รับหรือไม่
Madhu Avinash

2
โทเค็นนี้จะหมดอายุหรือไม่
ndh103

Show API Tokenดูเหมือนจะใช้ไม่ได้อีกต่อไป
Saikat

1
@MadhuAvinash ดูคำตอบของฉันด้านล่าง
RaGe

FYI. ใน Jenkins 2.150.1 ปุ่ม "เพิ่มโทเค็นใหม่" ดูเหมือนจะไม่ปรากฏจนกว่าจะมีโทเค็นอย่างน้อยหนึ่งรายการ โปรดตรวจสอบคำตอบของ @ RaGe สำหรับวิธีการทำโดยไม่ใช้ UI
m__

18

วิธีที่ไม่ใช่ UI ในการทำโพสต์นี้ Jenkins 2.129 คือ:

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

ซึ่งส่งคืน:

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

พรีเจนกินส์ 2.129

curl http://<username>:<password>@<jenkins-url>/me/configure 

2
คุณต้องรวมเศษ CSRF ( wiki.jenkins.io/display/JENKINS/Remote+access+API ) ในคำขอ curl ของคุณมิฉะนั้นจะล้มเหลวด้วย 403: Forbidden
MKesper

จะเกิดอะไรขึ้นถ้าชื่อผู้ใช้คือ name@domain.com เราได้เปิดใช้งาน single sign on ในเซิร์ฟเวอร์ jenkins
SibiCoder

2
@SibiCoder ลองแทนที่ '@' ด้วย '% 40'
Tim Kist

2

ทดสอบใน Jenkins 2.225

หลังจากทำการวิจัยเป็นเวลาหลายชั่วโมงฉันพบคำตอบ:

Api Token ใช้แทนโทเค็น CSFR อย่างไรก็ตามจะเกิดอะไรขึ้นหากคุณต้องการทำการรับรองความถูกต้องจากไคลเอนต์อื่น ๆ (POSTMAN, CLI. curl ฯลฯ )

ก่อนอื่นคุณต้องได้รับโทเค็น CSFR และบันทึกข้อมูลในคุกกี้ด้วย --cookie-jar

  • ร้องขอ

curl -s --cookie-jar / tmp / cookies -u ชื่อผู้ใช้: รหัสผ่าน http: // localhost: 8080 / crumbIssuer / api / json

  • การตอบสนอง

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

จากนั้นเราสามารถอ่านคุกกี้--cookieและสร้างโทเค็นใหม่ได้:

  • ร้องขอ

curl -X POST -H 'Jenkins-Crumb: your_crumb_token_generated_above' --cookie / tmp / คุกกี้ http: // localhost: 8080 / me / descriptorByName / jenkins.security.ApiTokenProperty / createNewToken? newTokenName = รหัสผ่าน your -utoken

  • การตอบสนอง

{"status": "ok", "data": {"tokenName": "โทเค็น Android ของฉัน", "tokenUuid": "c510e26c-b2e8-4021-bf79-81d1e4c112af", "tokenValue": "11a2a0c91913d1391d8e8cb155ca}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.