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

问题描述 投票:0回答:3

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

jenkins jenkins-pipeline jenkins-cli
3个回答
3
投票

正如 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(可以使用)。

0
投票
Jenkins 中的安全相关页面当前不是 REST API 的一部分。

昨天(当我写这个答案时)
角色策略插件

已经发布了版本

2.90

,添加了一些 REST API 功能。

也许这是更多的开始。

您可以使用

init groovy脚本

只需将其附加为容器的卷

0
投票
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()

我认为对于 REST API 没有任何正确的解决方案!


© www.soinside.com 2019 - 2024. All rights reserved.