Создание пользователя в Jenkins через API
Мне было интересно, могу ли я создать нового пользователя в Jenkins, используя его API. Я могу создавать задания, но документы API для Jenkins не имеют ничего общего с созданием пользователя.
на самом деле, я должен создать нового пользователя, а затем создать новое задание для этого пользователя, все это с помощью API.
5 ответов
вы правы, нет явной команды 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". Вот!--6-->Эхо кормит линию groovy код для CLI Дженкинса (обратите внимание, что = означает, что CLI должен получать код от STDIN).
также groovy script позволяет управлять разрешениями пользователя, однако точный код зависит от того, какая стратегия авторизации используется. Вы могли бы использовать этот пример скрипта как начать.
вот как создать пользователя после установки:
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
мне удалось получить следующий фрагмент 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 из ansible скрипта (работающего извне на сервере jenkins); поскольку Java cli не поддерживает создание учетных данных, фрагмент python кажется способом идти.
echo и pipe не работали на моих окнах, поэтому вместо этого я использовал файл сценария. Также проще добавить больше логики в файл сценария. Сценарий ниже проверит существующего пользователя перед добавлением нового, а затем установит электронную почту пользователя после создания учетной записи и даст доступ для чтения с помощью безопасности на основе матрицы. Вы можете запустить его, сохранив скрипт в файл, скажем, создание пользователя.groovy, а затем запустите следующее:
java -jar jenkins-cli.jar -s http://localhost/ groovy user-creation.groovy testUser testPassword testEmail@testEmail.com
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()
}
основываясь на ответе @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 =
Если вы похожи на меня, и вы не смогли найти Дженкинс-кли.jar сначала, который можно вытащить с вашего сервера Jenkins следующим образом:
curl -O http://127.0.0.1:8080/jnlpJars/jenkins-cli.jar