Cách nhận Mã thông báo API cho Jenkins


86

Tôi đang cố gắng sử dụng api phần còn lại của jenkins. Trong hướng dẫn, nó nói rằng tôi cần có khóa api. Tôi đã tìm khắp các trang cấu hình để tìm nó. Làm cách nào để lấy khóa API cho jenkins?


Nếu bạn muốn lập trình tương tự, sau đó bạn có thể có một cái nhìn tại Lập trình lấy Jenkins REST API Mã
footyapps27

Câu trả lời:


139

Kể từ Jenkins 2.129, cấu hình mã thông báo API đã thay đổi :

Bây giờ bạn có thể có nhiều mã thông báo và đặt tên cho chúng. Chúng có thể được thu hồi riêng lẻ.

  1. Đăng nhập Jenkins.
  2. Nhấp vào tên của bạn (góc trên bên phải).
  3. Nhấp vào Định cấu hình (menu bên trái).
  4. Sử dụng nút "Thêm mã thông báo mới" để tạo mã mới rồi đặt tên cho mã đó.
  5. Bạn phải sao chép mã khi tạo vì bạn không thể xem mã sau đó.
  6. Thu hồi các mã thông báo cũ khi không còn cần thiết.

Trước Jenkins 2.129: Hiển thị mã thông báo API như sau:

  1. Đăng nhập Jenkins.
  2. Nhấp vào tên của bạn (góc trên bên phải).
  3. Nhấp vào Định cấu hình (menu bên trái).
  4. Nhấp vào Hiển thị Mã thông báo API .

Mã thông báo API được tiết lộ.

Bạn có thể thay đổi mã thông báo bằng cách nhấp vào nút Thay đổi mã thông báo API .


2
có api nào để có được điều đó không?
Madhu Avinash

2
mã thông báo này sẽ hết hạn?
ndh103

Show API TokenCó vẻ như không còn hợp lệ.
Saikat

1
@MadhuAvinash Xem câu trả lời của tôi bên dưới
RaGe

FYI. Trên Jenkins 2.150.1, nút "Thêm mã thông báo mới" dường như không xuất hiện cho đến khi có ít nhất một mã thông báo tồn tại. Vui lòng kiểm tra câu trả lời của @ RaGe để biết cách thực hiện mà không cần giao diện người dùng.
m__

17

Cách không có giao diện người dùng để thực hiện bài đăng này Jenkins 2.129 là:

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

trả về:

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

Trước Jenkins 2.129

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

2
Bạn cần bao gồm CSRF crumb ( wiki.jenkins.io/display/JENKINS/Remote+access+API ) trong yêu cầu curl của mình, nếu không nó sẽ không thành công với 403: Forbidden.
MKesper

Điều gì xảy ra nếu tên người dùng là name@domain.com, chúng tôi đã bật đăng nhập một lần trong máy chủ
jenkins

2
@SibiCoder Hãy thử thay thế '@' bằng '% 40'
Tim Kist

1

Đã thử nghiệm trong Jenkins 2.225

Sau khi nghiên cứu trong vài giờ, tôi có thể tìm ra câu trả lời:

Mã thông báo Api được sử dụng thay cho mã thông báo CSFR. Tuy nhiên, điều gì sẽ xảy ra nếu bạn muốn xác thực từ bất kỳ ứng dụng khách nào khác (POSTMAN, CLI. Curl, v.v.).

Trước tiên, bạn cần lấy mã thông báo CSFR và lưu thông tin vào cookie với --cookie-jar

  • YÊU CẦU

curl -s --cookie-jar / tmp / cookies -u tên người dùng: mật khẩu http: // localhost: 8080 / crumbIssuer / api / json

  • PHẢN ỨNG

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

Sau đó, chúng tôi có thể đọc cookie --cookievà tạo mã thông báo mới:

  • YÊU CẦU

curl -X POST -H 'Jenkins-Crumb: your_crumb_token_generated_above' --cookie / tmp / cookies http: // localhost: 8080 / me / descriptorByName / jenkins.security.ApiTokenProperty / createNewToken? newTokenName = \ your_token_name -u tên người dùng: mật khẩu

  • PHẢN ỨNG

{"status": "ok", "data": {"tokenName": "my android token", "tokenUuid": "c510e26c-b2e8-4021-bf79-81d1e4c112af", "tokenValue": "11a2a0c91913d1391d8e8cb }155ca714581"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.