通过API在Jenkins中创建用户

vaj7vani  于 2023-08-03  发布在  Jenkins
关注(0)|答案(6)|浏览(216)

我想知道我是否可以使用Jenkins的API在Jenkins中创建一个新用户。我可以创建作业,但Jenkins的API文档没有任何与用户创建相关的内容。
实际上,我必须创建一个新用户,然后为该用户创建一个新作业,所有这些都使用API。

gab6jxml

gab6jxml1#

你是对的,没有显式的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作为开始。

iyfamqjs

iyfamqjs2#

安装后如何创建用户:

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

字符串
其中c3 a5 dcd 6 bc 3f 45 ee 8d 6c 9 f0 f5 abc 14 c 0是自动生成的密码,存在于日志或文件中(对于ubuntu):/var/lib/jenkins/secrets/initialAdminPassword

fnatzsnv

fnatzsnv3#

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

java -jar jenkins-cli.jar -s http://localhost/ groovy user-creation.groovy testUser testPassword testEmail@testEmail.com

个字符

x8goxv8g

x8goxv8g4#

我设法获得了以下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代码段看起来是个不错的选择。

pvcm50d1

pvcm50d15#

基于@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

wwodge7n

wwodge7n6#

我在GitHub上阅读了GlobalMatrixAuthorizationStrategy插件的代码,我试图找到他们如何将用户添加到MatrixAuthorizationStrategy并达到以下解决方案。
参考GlobalMatrixAuthorizationStrategy on GitHub

import hudson.model.*
import hudson.security.*
import hudson.tasks.Mailer
import org.jenkinsci.plugins.matrixauth.PermissionEntry
import org.jenkinsci.plugins.matrixauth.AuthorizationType

def username = "username"
def password = "password here"
def fullName = "User full name"
def instance = jenkins.model.Jenkins.instance
def user = instance.securityRealm.createAccount(username, password)
user.addProperty(new Mailer.UserProperty(email));
user.setFullName(fullName)
def strategy = instance.getAuthorizationStrategy()
strategy.add(Jenkins.READ, new PermissionEntry(AuthorizationType.USER, username))
//This is the solution     ^^^^
instance.save()

字符串

相关问题