如何在Active Choices插件中使用Jenkins API
在Active Choices插件中使用Groovy Jenkins API的解决方案
核心原因
Active Choices插件的Groovy脚本默认运行在沙箱环境中,而Jenkins脚本控制台默认绕过沙箱限制,这直接导致User.getAll()这类Jenkins核心API调用被沙箱拦截,且默认不显示错误提示。
解决方法
1. 临时关闭沙箱限制(不推荐生产环境)
在配置Active Choices参数时,找到Groovy Script区域的Use Groovy Sandbox选项,取消勾选。此时脚本可直接执行User.getAll(),和控制台行为一致。
注意:生产环境禁用沙箱会带来安全风险,可能被恶意脚本利用执行危险操作,仅建议测试环境临时使用。
2. 授权API签名(生产环境推荐)
通过Jenkins的脚本审批机制,为需要调用的API授权:
- 先尝试在Active Choices中执行
User.getAll(),此时Jenkins后台会生成未授权的签名记录。 - 进入
Manage Jenkins->In-process Script Approval。 - 在待审批列表中找到
staticMethod jenkins.model.User getAll(),点击Approve完成授权。 - 重新运行脚本,
User.getAll()即可正常执行。
3. 转换返回结果格式
Active Choices要求脚本返回符合下拉列表的格式(字符串列表或键值对映射),直接返回User.getAll()的对象集合无法正确显示,需转换为可展示的内容,例如:
// 返回用户全名列表 User.getAll().collect { it.fullName } // 或返回用户名与ID的键值对 User.getAll().collectEntries { [it.id, it.fullName] }
4. 开启调试排查问题
若仍无响应,可开启调试日志查看具体错误:
- 进入
Manage Jenkins->Configure System,找到Active Choices Plugin设置,勾选Enable Debug Logging。 - 执行构建后,查看
Manage Jenkins->System Log,即可看到脚本执行的详细错误信息,定位问题根源。
内容的提问来源于stack exchange,提问作者david.perez
相关产品推荐
相关产品推荐

