如何通过REST API从Jenkins创建和删除用户?

时间:2018-08-27 12:26:09

标签: jenkins jenkins-pipeline jenkins-cli

Jenkins是否公开了用于创建和删除用户的REST API?

2 个答案:

答案 0 :(得分:1)

正如安德鲁(Andrew)在他的answer中所说,无法通过REST API轻松实现。我目前正面临着同样的问题,并提出了某种网络抓取方法。这是必需的,因为Jenkins最终希望通过用户删除POST请求提供Jenkins-Crumb。

无论何时要人>单击用户ID>删除用户,都必须确认您确实要删除该用户。除了显而易见的 Yes (是)按钮之外,还有一些隐藏的表单字段,其中一个字段名为 Jenkins-Crumb 。单击按钮时,该字段的值将与 / doDelete POST请求一起发送。

我想出的解决方案是在获取https://<your-jenkins-url>/user/<username-to-delete>/delete之后读取Jenkins-Crumb,然后使用表单数据提供的Jenkins-Crumb对https://<your-jenkins-url>/user/<username-to-delete>/doDelete进行POST请求。虽然Jenkins-Crumb表单字段是通过JavaScript填充的,但是由于脚本是直接作为<script>crumb.init("Jenkins-Crumb", "jenkins-crumb-value");</script>包含在HTML源代码中的,因此无需执行JavaScript,因此matched via 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()

答案 1 :(得分:0)

当前没有。通过在Jenkins URL的末尾添加api/json,Jenkins中的许多页面(但不是所有页面)都公开了json(可以使用)。

Jenkins中与安全性相关的页面当前不属于REST API。

昨天(在我写此答案时),Role Strategy Plugin发布了版本2.90,其中添加了一些REST API功能。

也许这是更多的开始。

相关问题