APIを使用してJenkinsで新しいユーザーを作成できるかどうか疑問に思っていました。ジョブを作成できますが、Jenkins の API ドキュメントにはユーザーの作成に関する記述がありません。
実際には、新しいユーザーを作成してから、そのユーザーの新しいジョブを作成する必要があります。これらはすべて API を使用して行います。
私の 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()
}
次の 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 スニペットが適しているようです。