2013-07-18 137 views
14

我想知道是否可以使用其API在Jenkins中創建新用戶。我可以創建工作,但Jenkins的API文檔沒有與用戶創建相關的任何內容。通過API在Jenkins中創建用戶

實際上,我必須創建一個新用戶,然後爲該用戶創建一個新作業,所有這些都使用API​​。

回答

8

說得對,沒有明確的CLI命令來添加用戶。但你可以使用groovy腳本(使用CLI執行)。

細節取決於您的Jenkins如何配置。 例如,如果你的詹金斯使用自己的用戶數據庫,那麼你可以通過下面的CLI呼叫添加新用戶:

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

這個shell命令將創建登錄「user1」的新用戶和密碼「password123 」。 這裏echo向一個Jenkins CLI提供一行groovy代碼(請注意,=表示CLI應該從STDIN接收代碼)。

另外groovy腳本允許管理用戶權限,但是,確切的代碼取決於使用的授權策略。您可以使用this sample script作爲開始。

+0

確保您使用_Jenkins自己的用戶database_作爲身份驗證方法(_security realm_),否則將無法正常工作。 – kenorb

3

回聲和管道沒有在我的Windows上工作,所以我最終使用腳本文件來代替。在腳本文件中添加更多邏輯也更容易。以下腳本將在添加新用戶之前檢查現有用戶,然後在創建帳戶後設置用戶的電子郵件,並使用基於Matrix的安全性授予READ訪問權限。您可以通過保存腳本到文件中運行它,說用戶creation.groovy,然後運行以下,

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

如果我運行命令'java -jar jenkins-cli.jar -s http:// localhost:8080/groovy user-creation.groovy userName userPassword testEmail @ testEmail.com',我得到一個錯誤,因爲'ERROR:anonymous缺少總體/讀取權限' –

+0

這對我有用。 java -jar jenkins-cli.jar -s http:// localhost/groovy user-creation.groovy testUser testPassword [email protected] --username = --password = – Upen

3

我設法讓下面的Python代碼片段創建一個用戶使用ssh-鍵:

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 

這是有點像,只是一個REST接口必須知道代碼的內部和對象都應該解碼的類的名稱。我試圖從一個可靠的腳本(從外部運行到jenkins服務器)配置jenkins;由於java cli不支持創建憑證,因此python片段似乎是最佳選擇。

+0

嗨,Pedro,有什麼方法可以創建用戶使用python ?你的上面的代碼將創建憑據,我正在尋找用戶。 – Nilesh

3

這是如何在安裝後創建用戶:

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

凡c3a5dcd6bc3f45ee8d6c9f0f5abc14c0被自動記錄或文件(Ubuntu的)生成當前密碼:在/ var/lib中/詹金斯/祕密/ initialAdminPassword

+0

這是一個非常簡潔和直接的方法。你碰巧知道如何使用它來啓用安全性(領域和授權)?例如jenkins擁有自己的數據庫,「登錄用戶可以做任何事情」 – ffghfgh

1
對@ vitaleek的回答

大廈下面將抓住從文件中的默認管理員憑據,並創建一個新用戶:

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 = 

如果喲你和我一樣,你找不到詹金斯隊。罐子在第一,可以從詹金斯的服務器如下拉:

curl -O http://127.0.0.1:8080/jnlpJars/jenkins-cli.jar 
相關問題