2013-07-18 13 views
14

Mi chiedevo se posso creare un nuovo utente in Jenkins utilizzando la sua API. Posso creare lavori ma i documenti API per Jenkins non hanno nulla relativo alla creazione dell'utente.Creazione utente in Jenkins tramite API

In realtà, devo creare un nuovo utente, seguito con la creazione di un nuovo lavoro per l'utente, tutto questo utilizzando un'API.

risposta

8

Hai ragione, non v'è alcun comando CLI esplicita per l'aggiunta di un utente. Ma potresti usare lo script groovy per questo (usando la CLI per l'esecuzione).

I dettagli dipendono dalla configurazione del Jenkins. Ad esempio, se il Jenkins utilizza il proprio database di utenti, allora si potrebbe aggiungere un nuovo utente dal seguente chiamata CLI:

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

Questo guscio creerà un nuovo utente con login "user1" e password "password123 ". Qui echo alimenta una linea di codice scanalato ad un Jenkins CLI (si noti che = significa che CLI dovrebbe ricevere il codice da STDIN).

anche lo script Groovy permette di gestire i permessi degli utenti, tuttavia, il codice esatto dipende da quale strategia l'autorizzazione viene utilizzato. Potresti usare this sample script come inizio.

+0

assicurarsi che si sta utilizzando _Jenkins’ proprio database_ utente come metodo di autenticazione (_Sicurezza realm_), altrimenti non funzionerà. – kenorb

3

eco e il tubo non ha funzionato sul mio Windows, così ho finito per usare un file di script, invece. È anche più facile aggiungere più logica nel file di script. Lo script seguente controllerà l'utente esistente prima di aggiungere un nuovo utente, quindi imposta l'e-mail dell'utente dopo la creazione dell'account e fornisce l'accesso READ tramite la sicurezza basata su Matrix. È possibile eseguire salvando lo script in un file, ad esempio user-creation.groovy, e quindi eseguire il seguente,

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

se eseguo il comando 'java -jar jenkins-cli.jar -s http: // localhost: 8080/groovy user-creation.groovy userName userPassword testEmail @ testEmail.com', ricevo un errore come' ERRORE: anonimo manca l'autorizzazione generale/lettura –

+0

questo ha funzionato per me. java-jar jenkins-cli.jar -s http: // localhost/groovy user-creation.groovy testUser testPassword [email protected] --username = --password = – Upen

3

sono riuscito ad ottenere il seguente frammento di Python per creare un utente con ssh-chiave:

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 

e 'come una sorta di un'interfaccia REST, tranne che uno deve conoscere la struttura interna di codice ei nomi delle classi che gli oggetti si suppone per decodificare a.

sto cercando di configurare Jenkins da uno script ansible (correre esternamente al server Jenkins); poiché java cli non supporta la creazione delle credenziali, lo snippet python sembra la strada da percorrere.

+0

Ciao Pedro, c'è un modo per creare un utente usando python ? il tuo codice sopra creerà le credenziali, sto cercando l'utente. – Nilesh

3

Questo è il modo per creare utenti dopo l'installazione:

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

Dove c3a5dcd6bc3f45ee8d6c9f0f5abc14c0 viene generata automaticamente una password presente nel registro o nel file (per Ubuntu):/var/lib/Jenkins/segreti/initialAdminPassword

+0

questo è un metodo veramente conciso e diretto. Sai come usarlo per abilitare la sicurezza (regno e autorizzazione)? per esempio. il proprio database di jenkins e "gli utenti registrati possono fare qualsiasi cosa" – ffghfgh

1

sulla risposta di @ vitaleek il seguente sarà afferrare le credenziali di default di amministrazione dal file e creare un nuovo utente:

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 = 

Se yo sei come me e non potresti trovare il jenkins-cli.barattolo in un primo momento, che può essere tirato dal server Jenkins come segue:

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