【发布时间】:2018-08-27 12:26:08
【问题描述】:
Jenkins 是否公开了任何 REST API 来创建和删除用户?
【问题讨论】:
标签: jenkins jenkins-pipeline jenkins-cli
Jenkins 是否公开了任何 REST API 来创建和删除用户?
【问题讨论】:
标签: jenkins jenkins-pipeline jenkins-cli
正如 Andrew 在他的 answer 中所说,没有办法通过 REST API 轻松完成。我目前面临同样的问题,并想出了某种网络抓取。这是必需的,因为 Jenkins 最终希望通过用户删除 POST 请求提供 Jenkins-Crumb。
当您想要人员 > 点击用户 ID > 删除 用户时,您必须确认您确实要删除该用户。除了那个明显的 Yes 按钮之外,还有一些隐藏的表单字段,其中一个名为 Jenkins-Crumb。当您单击 Yes 按钮时,该字段的值将与 /doDelete POST 请求一起发送。
我想出的解决方案是在 GETting 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 填充的,但无需执行 JavaScript,因为脚本直接作为 <script>crumb.init("Jenkins-Crumb", "jenkins-crumb-value");</script> 包含在 HTML 源代码中,它可以是 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()
【讨论】:
目前没有。许多页面,但并非 Jenkins 中的所有页面都通过将 api/json 添加到 Jenkins URL 的末尾来公开 json(可以使用)。
Jenkins 中的安全相关页面目前不属于 REST API。
昨天说(在我写这个答案时)Role Strategy Plugin 发布了版本2.90,增加了一些 REST API 功能。
也许这是更多的开始。
【讨论】: