前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Jenkins]5分钟系列之三快速获取所有用户和job并实现快速授权

[Jenkins]5分钟系列之三快速获取所有用户和job并实现快速授权

作者头像
追马
发布2020-07-03 10:18:36
2.1K0
发布2020-07-03 10:18:36
举报
文章被收录于专栏:一日一工具

文档版本

v 1.0

更新日期

2017.12.23

作者

追马

扩散范围

全网

  • 一、准备工作
  • 1.1、环境准备
  • 1.2、需要了解的知识点
  • 1.3、推荐阅读
  • 1.4、关于用户的创建方式
  • 1.5、关于job的创建方式
  • 二、实现方式
  • 2.1、如何快速获取Jenkins上的所有用户
  • 2.2、效果图
  • 2.3、如何快速获取Jenkins上的所有Job
  • 2.2、效果图
  • 三、如何和权限认证结合起来
  • 3.1、手动设置相关[仅此一次]
  • 3.2、授权实现
  • 3.3、验证
  • 3.4、授权代码相关
  • 四、参考文档
  • 五、下期预告

阅读本文能学到的知识点

  • 如何快速获取Jenkins当前所有用户
  • 如何快速获取Jenkins当前所有job
  • 基于用户角色的快速授权

解决疼点

  • 如果你管理的项目超过100个,这个时候你去给某个用户授权某个项目的时候是不是感觉很暴躁~
  • 一对一授权的时候是不是看花眼了

一、准备工作 1.1、环境准备 软件版本功能jenkins2.95提供平台插件groovy-postbuild执行Groovy插件uno-choice动态选择插件role-strategy权限控制1.2、需要了解的知识点 1.2.1、关于Role Strategy Plugin(role-strategy) Role Strategy Plugin插件可以对构建的项目进行授权管理,让不同的用户管理不同的项目,将不同环境的权限进行区分。该插件可以很灵活的根据需求来进行划分权限,包括正则匹配等 1.3、推荐阅读 分分钟部署安装jenkins 1.4、关于用户的创建方式

  • jenkins开放注册,用户自己注册
  • 和ldap集成
  • jenkins关闭注册,由管理员统一生成

1.5、关于job的创建方式

  • 手动各种点点点
  • 调用API接口实现

二、实现方式 2.1、如何快速获取Jenkins上的所有用户

代码语言:javascript
复制
def users = hudson.model.User.getAll() return users

2.2、效果图

2.3、如何快速获取Jenkins上的所有Job

代码语言:javascript
复制
activeJobs = hudson.model.Hudson.instance.items.findAll{job -> job.isBuildable()} return activeJobs.name

2.2、效果图

三、如何和权限认证结合起来 3.1、手动设置相关[仅此一次]

  • 全局安全策略-> 选择Role-Based Strategy
  • Manage and Assign Roles -> Manage Roles -> Global roles -> 添加一个rd角色,对所有项目拥有read权限
  • 手动创建一个zhuima的帐号
  • Manage and Assign Roles -> Assign Roles -> Global roles -> 把创建的zhuima帐号添加到Global roles,权限属于rd

3.2、授权实现

3.3、验证

3.4、groovy-post授权代码相关

代码语言:javascript
复制
import hudson.model.*
import hudson.*
import hudson.security.*
import java.util.*
import com.michelin.cio.hudson.plugins.rolestrategy.*
import java.lang.reflect.*

// user 是传入参数
def ldapGroupName = manager.getEnvVariable("user")
// jobs是传入参数
def projectPrefix = manager.getEnvVariable("jobs")

def authStrategy = Hudson.instance.getAuthorizationStrategy()
if(authStrategy instanceof RoleBasedAuthorizationStrategy){
RoleBasedAuthorizationStrategy roleAuthStrategy = (RoleBasedAuthorizationStrategy) authStrategy

// Make constructors available
Constructor[] constrs = Role.class.getConstructors();
for (Constructor<?> c : constrs) {
c.setAccessible(true);
}
// Make the method assignRole accessible
Method assignRoleMethod = RoleBasedAuthorizationStrategy.class.getDeclaredMethod("assignRole", String.class, Role.class, String.class);
assignRoleMethod.setAccessible(true);

// Create role
Set<Permission> permissions = new HashSet<Permission>();
permissions.add(Permission.fromId("hudson.model.Item.Read"));
permissions.add(Permission.fromId("hudson.model.Item.Build"));
permissions.add(Permission.fromId("hudson.model.Item.Workspace"));
permissions.add(Permission.fromId("hudson.model.Item.Cancel"));
// The release permission is only available when the release plugin is installed
String releasePermission = Permission.fromId("hudson.model.Item.Release");
if (releasePermission != null) {
permissions.add(releasePermission);
}
permissions.add(Permission.fromId("hudson.model.Run.Delete"));
permissions.add(Permission.fromId("hudson.model.Run.Update"));
Role newRole = new Role(projectPrefix, projectPrefix + ".*", permissions);
roleAuthStrategy.addRole(RoleBasedAuthorizationStrategy.PROJECT, newRole);

// assign the role
roleAuthStrategy.assignRole(RoleBasedAuthorizationStrategy.PROJECT, newRole, ldapGroupName);

println "OK"
}
else {
println "Role Strategy Plugin not found!"
}

四、参考文档 获取Jenkins的所有job: https://goo.gl/bDExfE 获胜jenkins上的所有user: https://goo.gl/bSgmfs groovy实现Jenkins授权脚本: https://goo.gl/Xt6dq3 五、下期预告

  • 致谢华哥,华哥花了不少时间去测试这块的功能实现
  • 本文中基于Manage Roles的处理方式不够优雅,感兴趣的小伙伴可以优化下
  • jenkins常用插件集锦
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 链上追马 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档