Как создать учетные данные jenkins через REST API?

Мне нужно создать учетную запись jenkins (https://wiki.jenkins-ci.org/display/JENKINS/Credentials+Plugin) с помощью script. Как я могу это сделать, используя API REST или cli?

Обратите внимание, что я могу перечислить учетные данные, используя /credential -store/domain//api/json и/credential-store/domain//credential/8bd82461-e239-4db1-90bc-831ca3412e70/api/json и т.д..

Ответ 1

Эта проблема заняла у меня некоторое время, я долго разбирался, поэтому я решил оставить решение здесь, если оно кому-то еще нужно.

curl -X POST 'http://user:[email protected]_server:8080/credentials/store/system/domain/_/createCredentials' \
--data-urlencode 'json={
  "": "0",
  "credentials": {
    "scope": "GLOBAL",
    "id": "identification",
    "username": "manu",
    "password": "bar",
    "description": "linda",
    "$class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl"
  }
}'

Ответ 2

с последними jenkins вам нужен CRUMB для аутентификации для этой операции (ref fooobar.com/questions/551067/...)

CRUMB=$(curl -s 'http://user:[email protected]_server:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
curl -H $CRUMB -X POST 'http://user:[email protected]_server:8080/credentials/store/system/domain/_/createCredentials' \
--data-urlencode 'json={
  "": "0",
  "credentials": {
    "scope": "GLOBAL",
    "id": "identification",
    "username": "manu",
    "password": "bar",
    "description": "linda",
    "$class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl"
  }
}'

В противном случае вы получите

<body><h2>HTTP ERROR 403</h2>
<p>Problem accessing /credentials/store/system/domain/_/createCredentials. Reason:
<pre>    No valid crumb was included in the request</pre></p><hr><i><small>Powered by Jetty://</small></i><hr/>

Ответ 3

если вам нужно создать учетные данные, но с помощью пути файла pem вы можете использовать это:

Предпосылки: плагин ssh-credentials

CRUMB=$(curl -s 'http://{{jenkins_admin_username}}:{{jenkins_admin_password}}@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
curl -H $CRUMB -X POST 'http://{{jenkins_admin_username}}:{{jenkins_admin_password}}@localhost:8080/credentials/store/system/domain/_/createCredentials' \
--data-urlencode 'json={
  "": "0",
  "credentials": {
    "scope": "GLOBAL",
    "id": "'{{ii.ssh_user}}'",
    "username": "'{{ii.ssh_user}}'",
    "password": "",
    "privateKeySource": {
      "stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$FileOnMasterPrivateKeySource",
      "privateKeyFile": "'{{jenkins_home}}/{{ii.key_name}}.pem'",
    },
    "description": "'{{ii.ssh_user}}'",
    "stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey"
  }
}'

эта команда используется в незаменимой, но вы можете заменить {{variables}} своими собственными переменными

если вам нужно добавить все содержимое файла pem, которое необходимо изменить, чтобы:

....      
"stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$DirectEntryPrivateKeySource",
      "privateKey": "{{private_key_content}}",
    },
    "description": "{{user}}",
    "stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey"
...

Ответ 4

Просто добавив мои 2 цента здесь: если вы хотите создать учетные данные для определенной папки, используйте следующее:

curl -H $CRUMB -X POST 'http://user:[email protected]_server:8080/job/MY_FOLDER_NAME/credentials/store/folder/domain/_/createCredentials' \
...

Итак, вам нужно использовать /job/My_Folder в начале части запроса и заменить /store/system на /store/folder

Ответ 5

Для этого нет специального вызова API, но вы можете сделать это с помощью команд cli в jenkins jar.

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

Для предоставления им разрешений вы можете создать задачу в Jenkins, которая работает каждые N минут и выполняет groovy script, как описано здесь:

https://wiki.jenkins-ci.org/display/JENKINS/Grant+Cancel+Permission+for+user+and+group+that+have+Build+permission