Jenkins是否公开了用于创建和删除用户的REST API?
答案 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功能。
也许这是更多的开始。