我想知道我是否可以使用其API在Jenkins中创建新用户。我可以创建工作,但Jenkins的API文档没有与用户创建相关的任何内容。
实际上,我必须创建一个新用户,然后为该用户创建一个新作业,所有这些都使用API。
答案 0 :(得分:12)
你是对的,没有明确的CLI命令来添加用户。但是你可以使用groovy脚本(使用CLI执行)。
详细信息取决于Jenkins的配置方式。 例如,如果您的Jenkins使用自己的用户数据库,那么您可以通过以下CLI调用添加新用户:
echo 'jenkins.model.Jenkins.instance.securityRealm.createAccount("user1", "password123")' |
java -jar jenkins-cli.jar -s http://localhost/ groovy =
此shell命令将创建一个新用户,其登录名为“user1”,密码为“password123”。 这里 echo 将一行groovy代码提供给Jenkins CLI(注意 = 意味着CLI应该从STDIN接收代码)。
groovy脚本也允许管理用户权限,但是,确切的代码取决于使用的授权策略。您可以使用this sample script作为开头。
答案 1 :(得分:6)
这是安装后创建用户的方法:
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
答案 2 :(得分:4)
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()
}
答案 3 :(得分: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接口,除了必须知道代码的内部和对象应该解码的类的名称。
我正在尝试从ansible脚本配置jenkins(从外部运行到jenkins服务器);由于java cli不支持创建凭据,因此python代码段似乎已成为可能。
答案 4 :(得分:1)
在@ 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