Как создать и удалить пользователя из Jenkins через REST API? - PullRequest
0 голосов
/ 27 августа 2018

Существуют ли какие-либо REST API, предоставляемые Jenkins для создания и удаления пользователя?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Как сказал Эндрю в своем ответе , нет простого способа сделать это через REST API. Я в настоящее время сталкиваюсь с той же самой проблемой и придумал некоторый веб-просмотр. Это необходимо, поскольку Jenkins в конечном итоге ожидает, что Jenkins-Crumb будет предоставлен через POST-запрос на удаление пользователя.

Всякий раз, когда вы хотите Люди> Нажмите Идентификатор пользователя> Удалить пользователя, вы должны подтвердить, что действительно хотите удалить этого пользователя. Помимо этой очевидной кнопки Да есть некоторые скрытые поля формы, одно из которых называется Jenkins-Crumb . При нажатии кнопки Да значение этого поля отправляется с запросом / doDelete POST.

Решением, которое я придумал, является чтение Jenkins-Crumb после GETting https://<your-jenkins-url>/user/<username-to-delete>/delete, а затем выполнение запроса POST на https://<your-jenkins-url>/user/<username-to-delete>/doDelete с Jenkins-Crumb, предоставленным в качестве данных формы. Хотя поле формы Jenkins-Crumb заполняется с помощью JavaScript, нет необходимости выполнять JavaScript, поскольку скрипт напрямую включается как <script>crumb.init("Jenkins-Crumb", "jenkins-crumb-value");</script> в исходный код HTML, где его можно сопоставить через RegEx .

В Python это может выглядеть как

import re, requests, sys

with requests.Session() as s:
    s.auth = (ADMIN_USERNAME, ADMIN_APIKEY_OR_PASSWORD)
    url = "https://YOUR_JENKINS_URL/user/USER_TO_DELETE/delete"
    response = s.get(url)

    if not response.ok:
        sys.exit("HTTP error {} while accessing Jenkins at {}. Exiting.".format(response.status_code, url))

    re_match = re.search(r'<script>crumb\.init\("Jenkins-Crumb", "(\w+)"\);<\/script>', response.text)
    if not re_match:
        sys.exit("Couldn't get required Jenkins-Crumb. Exiting.")

    jenkins_crumb = re_match.group(1)

    url = "https://YOUR_JENKINS_URL/user/USER_TO_DELETE/doDelete"
    data = { "Jenkins-Crumb": jenkins_crumb }
    response = s.post(url, params=data)

    if not response.ok:
        sys.exit("Couldn't delete user")

    s.close()
0 голосов
/ 28 августа 2018

В настоящее время нет. Многие страницы, но не все страницы в Jenkins предоставляют json (который можно использовать), добавляя api/json в конец URL Jenkins.

Страницы, связанные с безопасностью в Jenkins, в настоящее время не являются частью REST API.

При этом вчера (когда я пишу этот ответ) плагин Role Strategy выпустил версию 2.90 , которая добавляет некоторые возможности REST API.

Может быть, это начало большего.

...