Создание пользователя в Jenkins через API

Мне было интересно, могу ли я создать нового пользователя в Jenkins, используя его API. Я могу создавать задания, но документы API для Jenkins не имеют ничего общего с созданием пользователя.

На самом деле, мне нужно создать нового пользователя, а затем создать новое задание для этого пользователя, все это с помощью API.

Ответ 1

Вы правы, нет явной команды CLI для добавления пользователя. Но для этого вы можете использовать groovy script (используя CLI для выполнения).

Детали зависят от того, как настроен ваш Jenkins. Например, если ваш Jenkins использует собственную пользовательскую базу данных, вы можете добавить нового пользователя с помощью следующего вызова CLI:

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

Эта команда оболочки создаст нового пользователя с логином "user1" и паролем "password123". Здесь echo подает строку кода groovy в CLI Jenkins (обратите внимание, что = означает, что CLI должен получать код от STDIN).

Также groovy script позволяет управлять полномочиями пользователей, однако точный код зависит от того, какая стратегия авторизации используется. Вы можете использовать этот образец script как начало.

Ответ 2

echo и pipe не работают на моей Windows, поэтому я в конечном итоге использовал файл script. Также легче добавить логику в файл script. script ниже проверит существующего пользователя перед добавлением нового пользователя, а затем настроит электронную почту пользователя после создания учетной записи и предоставит доступ READ, используя защиту на основе Matrix. Вы можете запустить его, сохранив script в файл, скажем, user-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()
} 

Ответ 3

Мне удалось получить следующий фрагмент python для создания пользователя с помощью 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

Это похоже на интерфейс REST, за исключением того, что нужно знать внутренности кода и имена классов, которые должны быть декодированы объектами.

Я пытаюсь настроить jenkins из ansible script (выполняется извне на сервер jenkins); поскольку java cli не поддерживает создание учетных данных, кажется, что путь к python кажется пустым.

Ответ 4

Вот как создать пользователя после установки:

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/jenkins/secrets/initialAdminPassword

Ответ 5

Основываясь на @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 =

Если вы похожи на меня, и сначала вы не можете найти jenkins-cli.jar, это можно вытащить с вашего сервера Jenkins следующим образом:

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