如何通过API方法删除Jenkins 2.426.3用户?脚本执行异常求助
执行Groovy脚本尝试删除Jenkins(2.426.3)中基于角色权限策略的用户时,脚本输出"删除成功"但实际用户未被删除,甚至用户不存在时也会输出成功提示。
原脚本如下:
import jenkins.model.Jenkins import com.michelin.cio.hudson.plugins.rolestrategy.RoleBasedAuthorizationStrategy def jenkins = Jenkins.getInstance() def authStrategy = jenkins.getAuthorizationStrategy() if (!(authStrategy instanceof RoleBasedAuthorizationStrategy)) { println("The current authorization strategy is not Role-based. Please configure Jenkins to use Role-based Authorization Strategy.") return } def deleteUser(authStrategy, String type, String user) { try { authStrategy.doDeleteUser(type, user) println("Deleted the user '$user' successfully from type '$type'.") } catch (Exception e) { println("Failed to delete user '$user' from type '$type': ${e.message}") } } deleteUser(authStrategy, "globalRoles", "cleanup_test_user1") jenkins.save()
问题原因
doDeleteUser是插件用于处理Web请求的内部方法,它依赖HTTP请求上下文才能正常工作,直接在脚本中调用不会触发实际的删除逻辑- 这个方法没有内置用户存在性校验,也不会在操作失败时抛出异常,所以无论用户是否存在,都会进入成功提示分支
解决方案
改用Role Strategy插件提供的直接操作权限数据的API,先校验用户是否存在,再执行删除操作:
import jenkins.model.Jenkins import com.michelin.cio.hudson.plugins.rolestrategy.RoleBasedAuthorizationStrategy import com.michelin.cio.hudson.plugins.rolestrategy.RoleMap def jenkins = Jenkins.getInstance() def authStrategy = jenkins.getAuthorizationStrategy() if (!(authStrategy instanceof RoleBasedAuthorizationStrategy)) { println("当前授权策略不是基于角色的,请先配置Jenkins使用Role-based Authorization Strategy。") return } def deleteUser(authStrategy, String type, String user) { try { RoleMap roleMap = authStrategy.getRoleMap(type) // 检查用户是否存在于该类型的角色映射中 if (!roleMap.getAllUsers().contains(user)) { println("用户 '$user' 在 '$type' 中不存在,无需删除。") return } // 从该类型的所有角色中移除用户 roleMap.removeUserFromAllRoles(user) println("已成功从 '$type' 中删除用户 '$user'。") } catch (Exception e) { println("删除 '$type' 中的用户 '$user' 失败: ${e.message}") } } deleteUser(authStrategy, "globalRoles", "cleanup_test_user1") jenkins.save()
修正说明
- 通过
getRoleMap(type)获取对应权限类型(全局/项目等)的角色映射对象,这是操作权限数据的正确入口 - 先通过
getAllUsers()校验用户是否存在,避免误报成功 - 使用
removeUserFromAllRoles(user)方法从该类型下的所有角色中移除用户,这是插件提供的官方操作API,能确保修改生效 - 操作完成后调用
jenkins.save()保存配置,确保修改持久化
内容的提问来源于stack exchange,提问作者qwerty
相关产品推荐
相关产品推荐

