介绍新的文件夹授权插件

640?wx_fmt=jpeg

在我的 Google Summer of Code Project 期间,我创建了全新的 Folder Auth 插件,可轻松管理 Folders plugin 对文件夹中组织的项目的权限。这个新插件旨在通过易于管理的角色进行快速权限检查。该插件的 1.0 版本刚刚发布,可以从您的 Jenkins 更新中心下载。

该插件的灵感来自角色策略插件,可改善性能并简化角色管理。开发该插件是为了解决 Role Strategy Plugin 在许多角色上的性能限制。同时,该插件通过文件夹解决了 Jenkins 中组织项目最受欢迎的方式之一。该插件还具有一个新的 UI ,将来会有更多改进。

该插件支持三种类型的角色,分别适用于 Jenkins 中的不同位置。

  • 全局角色:适用于 Jenkins 的所有地方

  • 代理角色:限制连接到您的实例的多个代理的权限

  • 文件夹角色:适用于文件夹内组织的多个作业

640?wx_fmt=png

角色策略插件的性能改进

与角色策略插件不同,此插件不使用正则表达式来查找匹配的项目和代理,从而改善了我们的性能并简化了管理员的工作。为了减少需要管理的角色数量,通过文件夹角色授予文件夹的权限将继承其所有子项。这对于通过单个角色访问多个项目很有用。同样,一个代理角色可以应用于多个代理,并分配给多个用户。

此插件的设计目的是在权限检查方面优于角色策略插件。这些改进是使用我在 GSOC 项目的第一阶段创建的micro-benchmark framework来衡量的。两个插件相同配置的基准测试表明,与角色策略 2.13 中的全局角色相比, 500 个全局角色的权限检查速度提高了 934 倍,角色策略 2.13 本身包含一些性能改进。将文件夹角色与角色策略的项目角色进行比较,对于 250 个组织在 150 个用户的实例上的两级深层文件夹中的项目,对作业的访问权限检查几乎快了 15 倍。您可以在 此处 看到基准和结果比较。

Jenkins 配置作为代码支持

该插件支持 Jenkins 的“代码即配置”功能,因此您无需通过 Web UI 即可配置权限。YAML 配置如下所示:

jenkins:
authorizationStrategy:
folderBased:
globalRoles:
- name: "admin"
permissions:
- id: "hudson.model.Hudson.Administer"
# ...
sids:
- "admin"
- name: "read"
permissions:
- id: "hudson.model.Hudson.Read"
sids:
- "user1"
folderRoles:
- folders:
- "root"
name: "viewRoot"
permissions:
- id: "hudson.model.Item.Read"
sids:
- "user1"
agentRoles:
- agents:
- "agent1"
name: "agentRole1"
permissions:
- id: "hudson.model.Computer.Configure"
- id: "hudson.model.Computer.Disconnect"
sids:
- "user1"

带有 Swagger 支持的 REST API

该插件提供 REST API ,用于通过 Swagger.json 管理具有 OpenAPI 规范的角色。您可以在 SwaggerHub 上查看 Swagger API 。SwaggerHub 提供了多种语言的存根,可以下载并用于与插件进行交互。您还可以使用 curl 从命令行查看一些示例请求。

640?wx_fmt=png

640?wx_fmt=png

接下来做什么

在不久的将来,我想改进用户界面,使插件更容易使用。我还希望改进 API 、文档和更多的优化来提高插件的性能。

链接和反馈

我很想听听你的意见和建议。请随时通过 Role Strategy Plugin Gitter chat 或通过 Jenkins Developer Mailing list 与我联系。

  • Presentation slides for second phase evaluations

  • Documentation for the Folder Auth Plugin

  • Demo of the Folder Authorization plugin

推荐阅读

640?wx_fmt=png

译者:张文君