2013-07-18 50 views
14

Tôi đã tự hỏi liệu mình có thể tạo người dùng mới trong Jenkins bằng API của mình hay không. Tôi có thể tạo việc làm nhưng các tài liệu API cho Jenkins không có bất cứ điều gì liên quan đến việc tạo người dùng.Tạo người dùng trong Jenkins qua API

Thực ra, tôi phải tạo người dùng mới, sau đó tạo công việc mới cho người dùng đó, tất cả điều này bằng API.

Trả lời

8

Bạn nói đúng, không có lệnh CLI rõ ràng nào để thêm người dùng. Nhưng bạn có thể sử dụng kịch bản groovy cho việc này (sử dụng CLI để thực thi).

Chi tiết phụ thuộc vào cách cấu hình Jenkins của bạn. Ví dụ, nếu Jenkins của bạn sử dụng cơ sở dữ liệu người dùng của riêng mình, sau đó bạn có thể thêm một người dùng mới bằng cuộc gọi CLI sau:

lệnh
echo 'jenkins.model.Jenkins.instance.securityRealm.createAccount("user1", "password123")' | 
java -jar jenkins-cli.jar -s http://localhost/ groovy = 

vỏ này sẽ tạo một người dùng mới với đăng nhập "user1" và password "password123 ". Tại đây echo cấp một dòng mã groovy cho một CLI Jenkins (lưu ý rằng = có nghĩa là CLI sẽ nhận mã từ STDIN).

Ngoài ra kịch bản lệnh groovy cũng cho phép quản lý quyền của người dùng, tuy nhiên, mã chính xác tùy thuộc vào chiến lược ủy quyền nào được sử dụng. Bạn có thể sử dụng this sample script làm điểm bắt đầu.

+0

Đảm bảo bạn đang sử dụng cơ sở dữ liệu người dùng riêng của _Jenkins_ làm phương thức xác thực (_security realm_), nếu không nó sẽ không hoạt động. – kenorb

3

tiếng vọng và đường ống không hoạt động trên Windows của tôi, vì vậy tôi đã sử dụng tệp tập lệnh thay thế. Việc thêm nhiều logic hơn vào tệp tập lệnh cũng dễ dàng hơn. Kịch bản bên dưới sẽ kiểm tra người dùng hiện tại trước khi thêm người dùng mới, sau đó đặt email của người dùng sau khi tạo tài khoản và cấp quyền truy cập READ bằng bảo mật dựa trên Ma trận. Bạn có thể chạy nó bằng cách tiết kiệm kịch bản vào một tập tin, hãy nói với người sử dụng creation.groovy, và sau đó chạy sau,

java -jar jenkins-cli.jar -s http://localhost/ groovy user-creation.groovy testUser testPassword [email protected] 

import hudson.model.* 
import hudson.security.* 
import hudson.tasks.Mailer 

def userId = args[0] 
def password = args[1] 
def email = args[2] 
def instance = jenkins.model.Jenkins.instance 
def existingUser = instance.securityRealm.allUsers.find {it.id == userId} 

if (existingUser == null) { 
    def user = instance.securityRealm.createAccount(userId, password) 
    user.addProperty(new Mailer.UserProperty(email)); 

    def strategy = (GlobalMatrixAuthorizationStrategy) instance.getAuthorizationStrategy() 
    strategy.add(Hudson.READ, userId) 
    instance.setAuthorizationStrategy(strategy) 
    instance.save() 
} 
+1

nếu tôi chạy lệnh 'java -jar jenkins-cli.jar -s http: // localhost: 8080/groovy user-creation.groovy userName userPassword testEmail @ testEmail.com', tôi gặp lỗi như 'ERROR: anonymous thiếu quyền Tổng quan/Đọc' –

+0

tính năng này có hiệu quả đối với tôi. java -jar jenkins-cli.jar -s http: // localhost/groovy user-creation.groovy testUser testPassword [email protected] --username = --password = – Upen

3

tôi quản lý để có được đoạn mã python sau để tạo một người dùng với ssh-key:

import json 
import requests 

def main(): 
    data = { 
     'credentials': { 
      'scope': "GLOBAL", 
      'username': "jenkins", 
      'privateKeySource': { 
       'privateKey': "-----BEGIN RSA PRIVATE KEY-----\nX\n-----END RSA PRIVATE KEY-----", 
       'stapler-class': "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$DirectEntryPrivateKeySource" 
      }, 
      'stapler-class': "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey" 
     } 
    } 

    payload = { 
     'json': json.dumps(data), 
     'Submit': "OK", 
    } 
    r = requests.post("http://%s:%d/credential-store/domain/_/createCredentials" % (HOSTNAME, 8080), data=payload) 
    if r.status_code != requests.codes.ok: 
     print r.text 

Nó giống như giao diện REST, ngoại trừ việc phải biết nội bộ của mã và tên của các đối tượng cần giải mã.

Tôi đang cố định cấu hình jenkins từ tập lệnh không thể đọc (chạy bên ngoài máy chủ jenkins); vì cli java không hỗ trợ tạo thông tin đăng nhập, đoạn mã python dường như là cách để đi.

+0

Hi Pedro, có cách nào để tạo người dùng bằng python không ? mã trên của bạn sẽ tạo thông tin đăng nhập, tôi đang tìm kiếm người dùng. – Nilesh

3

Đây là cách để tạo ra người sử dụng sau khi cài đặt:

echo 'jenkins.model.Jenkins.instance.securityRealm.createAccount("user", "password")' | java -jar jenkins-cli.jar -auth admin:c3a5dcd6bc3f45ee8d6c9f0f5abc14c0 -s http://localhost:8080/ groovy = 

đâu c3a5dcd6bc3f45ee8d6c9f0f5abc14c0 được tự động tạo ra hiện password trong nhật ký hoặc trong tập tin (đối với ubuntu):/var/lib/Jenkins/bí mật/initialAdminPassword

+0

đây là một phương pháp thực sự súc tích và đơn giản. Bạn có biết làm thế nào để sử dụng điều này để cho phép bảo mật (lĩnh vực và ủy quyền)? ví dụ. cơ sở dữ liệu riêng của jenkins và 'người dùng đã đăng nhập có thể làm bất cứ điều gì' – ffghfgh

1

Xây dựng trên câu trả lời của @ vitaleek sau đây sẽ lấy bằng chứng xác thực quản trị mặc định từ tệp và tạo người dùng mới:

pass=`sudo cat /var/lib/jenkins/secrets/initialAdminPassword` && echo 'jenkins.model.Jenkins.instance.securityRealm.createAccount("user1", "password123")' | sudo java -jar jenkins-cli.jar -auth admin:$pass -s http://localhost:8080/ groovy = 

Nếu yo u're như tôi và bạn không thể tìm thấy jenkins-cli.jar lúc đầu, có thể được kéo từ máy chủ Jenkins của bạn như sau:

curl -O http://127.0.0.1:8080/jnlpJars/jenkins-cli.jar