2013-07-18 13 views
14

Zastanawiam się, czy mogę utworzyć nowego użytkownika w Jenkins za pomocą jego API. Mogę tworzyć zadania, ale dokumenty API dla Jenkins nie mają nic wspólnego z tworzeniem użytkownika.Tworzenie użytkownika w Jenkins poprzez API

Właściwie, muszę utworzyć nowego użytkownika, a następnie utworzyć nowe zadanie dla tego użytkownika, wszystko za pomocą interfejsu API.

Odpowiedz

8

Masz rację, nie ma wyraźnego polecenia CLI do dodania użytkownika. Ale można użyć do tego groovy skrypt (przy użyciu CLI do wykonania).

Szczegóły zależą od konfiguracji Jenkins. Na przykład, jeśli Jenkins korzysta z własnej bazy danych użytkownika, a następnie można dodać nowego użytkownika za pomocą następującego wywołania CLI:

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

Ta powłoka będzie utworzyć nowego użytkownika z logowania „user1” i hasło „password123 ". Tutaj echo podaje linię świetnego kodu do interfejsu Jenkins (pamiętaj, że = oznacza, że ​​CLI powinien otrzymać kod ze STDIN).

Również groovy skrypt pozwala zarządzać uprawnieniami użytkownika, jednak dokładny kod zależy od strategii autoryzacji. Na początek możesz użyć this sample script.

+0

Upewnij się, że używasz _Jenkins’ własne database_ użytkownika jako metody uwierzytelniania (_security realm_), w przeciwnym razie nie będzie działać. – kenorb

3

Funkcja echo i pipe nie działała w moim systemie Windows, więc zamiast tego użyłem pliku skryptu. Łatwiej też dodać więcej logiki do pliku skryptu. Poniższy skrypt sprawdzi istniejącego użytkownika przed dodaniem nowego użytkownika, a następnie ustawi pocztę e-mail użytkownika po utworzeniu konta i umożliwi dostęp do odczytu READ przy użyciu zabezpieczeń opartych na macierzach. Można go uruchomić poprzez zapisanie skryptu do pliku, powiedzmy obsługi creation.groovy, a następnie uruchom następujące,

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

jeśli uruchomię polecenie 'java -jar jenkins-cli.jar -s http: // localhost: 8080/groovy user-creation.groovy nazwa_użytkownika userPassword testEmail @ testEmail.com', otrzymuję komunikat o błędzie" BŁĄD: anonimowy brakuje pozwolenia Ogólny/Odczyt " –

+0

to działało dla mnie. java -jar jenkins-cli.jar -s http: // localhost/groovy user-creation.groovy testUżytkownicy testPassword [email protected] --username = --password = – Upen

3

udało mi się następujący fragment kodu Pythona aby utworzyć użytkownika z 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 

jest to coś w rodzaju interfejs REST wyjątkiem, że trzeba znać wewnętrzne kodu i nazwy klas, które obiekty są rzekomo do dekodowania.

Próbuję skonfigurować jenkins ze skryptu ansible (działającego zewnętrznie na serwerze Jenkinsa); ponieważ java cli nie obsługuje tworzenia poświadczeń, wydaje się, że jest to fragment kodu Pythona.

+0

Witaj Pedro, czy istnieje sposób na stworzenie użytkownika za pomocą pythona ? powyższy kod utworzy poświadczenia, szukam użytkownika. – Nilesh

3

ten sposób stworzyć użytkownika po instalacji:

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

Gdzie c3a5dcd6bc3f45ee8d6c9f0f5abc14c0 jest automatycznie wygenerowane hasło obecne w dzienniku lub w pliku (na Ubuntu):/var/lib/Jenkins/tajemnice/initialAdminPassword

+0

jest to naprawdę zwięzła i prosta metoda. Czy zdajesz sobie sprawę, jak używać tego do włączania zabezpieczeń (dziedzina i autoryzacja)? na przykład jenkins posiada własną bazę danych, a "zalogowani użytkownicy mogą robić wszystko" – ffghfgh

1

Opierając się na odpowiedź @ vitaleek za dodaje przechwyci poświadczenia domyślnego administratora z pliku i utworzenie nowego użytkownika:

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 = 

Jeśli yo jesteś taki jak ja i nie mogłeś znaleźć jenkins-cli.słoik na początku, które mogą być pobierane z serwera Jenkins następująco:

curl -O http://127.0.0.1:8080/jnlpJars/jenkins-cli.jar 
Powiązane problemy