通过API在Jenkins中创建用户

shu*_*ham 15 api hudson jenkins

我想知道我是否可以使用其API在Jenkins中创建新用户.我可以创建工作,但Jenkins的API文档没有与用户创建相关的任何内容.

实际上,我必须创建一个新用户,然后为该用户创建一个新作业,所有这些都使用API​​.

izz*_*kil 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 =
Run Code Online (Sandbox Code Playgroud)

此shell命令将创建一个新用户,其登录名为"user1",密码为"password123".这里echo将一行groovy代码提供给Jenkins CLI(注意=表示CLI应该从STDIN接收代码).

groovy脚本也允许管理用户权限,但是,确切的代码取决于使用的授权策略.您可以使用此示例脚本作为开始.

  • 确保您使用 _Jenkins 自己的用户数据库_ 作为身份验证方法(_安全领域_),否则将无法工作。 (2认同)

小智 6

这是安装后如何创建用户:

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

其中c3a5dcd6bc3f45ee8d6c9f0f5abc14c0自动生成密码存在于日志或文件中(对于ubuntu):/ var/lib/jenkins/secrets/initialAdminPassword


bar*_*yku 5

echo 和 pipe 在我的 Windows 上不起作用,所以我最终使用了一个脚本文件。在脚本文件中添加更多逻辑也更容易。下面的脚本将在添加新用户之前检查现有用户,然后在创建帐户后设置用户的电子邮件并使用基于 Matrix 的安全性授予 READ 访问权限。您可以通过将脚本保存到文件中来运行它,比如 user-creation.groovy,然后运行以下命令,

java -jar jenkins-cli.jar -s http://localhost/ groovy user-creation.groovy testUser testPassword testEmail@testEmail.com
Run Code Online (Sandbox Code Playgroud)
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()
} 
Run Code Online (Sandbox Code Playgroud)