2013-07-18 15 views
14

Ich frage mich, ob ich einen neuen Benutzer in Jenkins mithilfe seiner API erstellen kann. Ich kann Jobs erstellen, aber die API-Dokumente für Jenkins haben nichts mit der Benutzererstellung zu tun.Erstellen von Benutzer in Jenkins über API

Eigentlich muss ich einen neuen Benutzer erstellen, gefolgt von der Erstellung eines neuen Jobs für diesen Benutzer, alles mit einer API.

Antwort

8

Sie haben recht, es gibt keinen expliziten CLI-Befehl zum Hinzufügen eines Benutzers. Aber Sie könnten dafür ein grooviges Skript verwenden (mit der CLI zur Ausführung).

Die Details hängen davon ab, wie Ihr Jenkins konfiguriert ist. Zum Beispiel, wenn Ihre Jenkins seine eigene Benutzerdatenbank verwenden, dann könnten Sie einen neuen Benutzer durch den folgenden CLI-Aufruf hinzu:

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

Dieses Shell-Befehl einen neuen Benutzer mit login „user1“ schaffen und dem Passwort „kennwort123 ". Hier Echo speist eine Zeile von groovy Code zu einem Jenkins CLI (beachten Sie, dass = bedeutet, dass CLI Code von STDIN erhalten soll).

Auch groovy Skript ermöglicht Benutzerrechte zu verwalten, aber der genaue Code hängt davon ab, welche Autorisierungsstrategie verwendet wird. Sie könnten this sample script als Start verwenden.

+0

sicher, dass Sie _Jenkins eigene Benutzer database_ als Authentifizierungsmethode (_Sicherheit realm_) verwenden, sonst wird es nicht funktionieren. – kenorb

3

echo und pipe funktionierte nicht auf meinem Windows, so dass ich stattdessen eine Skriptdatei verwendet. Es ist auch einfacher, mehr Logik in der Skriptdatei hinzuzufügen. Das folgende Skript prüft vorhandene Benutzer, bevor ein neuer Benutzer hinzugefügt wird. Anschließend können Sie die E-Mail-Adresse des Benutzers nach der Kontoerstellung festlegen und READ-Zugriff mithilfe von Matrix-basierter Sicherheit erteilen. Sie können es durch Speichern des Skripts in eine Datei ausführen, sagen Benutzer-creation.groovy, und dann die folgende ausführen,

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

Wenn ich den Befehl 'java -jar jenkins-cli.jar -s http: // localhost: 8080/groovy benutzer-creation.groovy username userPassword testEmail @ testEmail.com ', bekomme ich einen Fehler als' ERROR: anonym fehlt die Overall/Read Berechtigung " –

+0

das hat bei mir funktioniert. java -jar jenkins-cli.jar -s http: // localhost/groovy benutzer-creation.groovy testUser testPassword [email protected] --username = --password = – Upen

3

ich es geschafft, die folgende Python-Schnipsel bekommen einen Benutzer zu erstellen mit ssh-Schlüssel:

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 

Es ist so etwas wie eine REST-Schnittstelle, außer dass man die Interna des Codes und die Namen der Klassen wissen muss, dass die Objekte sollen, entschlüsseln.

Ich versuche, jenkins von einem ansible Skript zu konfigurieren (das extern zum jenkins Server läuft); Da der Java-CLI das Erstellen der Anmeldeinformationen nicht unterstützt, scheint das Python-Snippet der richtige Weg zu sein.

+0

Hallo Pedro, gibt es eine Möglichkeit, Benutzer mit Python zu erstellen ? Ihr oben angegebener Code wird Credential erstellen, ich suche nach Benutzer. – Nilesh

3

Dies ist, wie Benutzer nach der Installation zu erstellen:

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

Wo c3a5dcd6bc3f45ee8d6c9f0f5abc14c0 automatisch Passwort in Protokoll oder in der Datei erzeugt wird (ubuntu):/var/lib/jenkins/secrets/initialAdminPassword

+0

Dies ist eine sehr präzise und unkomplizierte Methode. Wissen Sie, wie Sie damit Sicherheit (Bereich und Autorisierung) aktivieren können? z.B. jenkins eigene Datenbank und "angemeldete Benutzer können alles tun" – ffghfgh

1

aufbauend auf der Antwort von @ vitaleek folgenden wird die Standard-Admin-Anmeldeinformationen aus der Datei packen und einen neuen Benutzer erstellen:

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 = 

Wenn yo Du bist wie ich und du konntest den jenkins-cli nicht finden.auf dem ersten Glas, das von Ihrem Jenkins Server gezogen werden kann, wie folgt:

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