Jenkins 是否公开了用于创建和删除用户的 REST API?
正如 Andrew 在他的 answer 中所说,没有办法通过 REST API 轻松做到这一点。我目前面临着同样的问题,并想出了某种网络抓取的方法。这是必需的,因为 Jenkins 最终希望通过用户删除 POST 请求提供 Jenkins-Crumb。
每当您想要人员 > 单击用户 ID > 删除某个用户时,您都必须确认您确实要删除该用户。除了那个明显的“是”按钮之外,还有一些隐藏的表单字段,其中一个名为“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 源中,可以通过 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 中的所有页面)通过在 Jenkins URL 末尾添加
api/json
来公开 json(可以使用)。
昨天(当我写这个答案时)角色策略插件已经发布了版本
2.90
,添加了一些 REST API 功能。您可以使用init groovy脚本
只需将其附加为容器的卷import jenkins.model.*
import hudson.security.*
def instance = Jenkins.getInstance()
def hudsonRealm = new HudsonPrivateSecurityRealm(false)
hudsonRealm.createAccount("User", "Password")
instance.setSecurityRealm(hudsonRealm)
def strategy = new FullControlOnceLoggedInAuthorizationStrategy()
instance.setAuthorizationStrategy(strategy)
instance.save()