18

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

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

4

5 に答える 5

5

私の Windows では echo と pipe が機能しなかったので、代わりにスクリプト ファイルを使用することになりました。また、スクリプト ファイルにロジックを追加するのも簡単です。以下のスクリプトは、新しいユーザーを追加する前に既存のユーザーをチェックし、アカウントの作成後にユーザーの電子メールを設定し、Matrix ベースのセキュリティを使用して読み取りアクセスを許可します。スクリプトを user-creation.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()
} 
于 2015-11-02T23:00:15.963 に答える
4

次の 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 スニペットが適しているようです。

于 2015-11-19T02:46:51.520 に答える