web-dev-qa-db-ja.com

APIを介してJenkinsでユーザーを作成する

APIを使用してJenkinsで新しいユーザーを作成できるかどうか疑問に思いました。ジョブを作成することはできますが、JenkinsのAPIドキュメントにはユーザーの作成に関連するものは何もありません。

実際には、新しいユーザーを作成してから、そのユーザーの新しいジョブを作成する必要があります。これらはすべてAPIを使用して行われます。

15
shubham

そうです、ユーザーを追加するための明示的なCLIコマンドはありません。ただし、これにはgroovyスクリプトを使用できます(実行に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コードの行をJenkins CLIにフィードします(=CLIがSTDINからコードを受信する必要があることを意味します)。

また、groovyスクリプトを使用するとユーザーのアクセス許可を管理できますが、正確なコードは使用する認証戦略によって異なります。 このサンプルスクリプト を開始点として使用できます。

12
izzekil

インストール後にユーザーを作成する方法は次のとおりです。

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

6
vitaleek

エコーとパイプがWindowsで機能しなかったため、代わりにスクリプトファイルを使用することになりました。スクリプトファイルにロジックを追加する方も簡単です。以下のスクリプトは、新しいユーザーを追加する前に既存のユーザーをチェックし、アカウント作成後にユーザーの電子メールを設定し、Matrixベースのセキュリティを使用してREADアクセスを許可します。スクリプトを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()
} 
4
barryku

Ssh-keyでユーザーを作成するために次のpythonスニペットを取得することができました:

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スニペットが最適な方法のようです。

3
Pedro Marques

@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
1
Doug