如何在Active Choice参数Groovy脚本中访问Jenkins系统配置变量
在Jenkins Active Choice参数脚本中访问系统配置变量
你遇到的问题核心是Jenkinsfile流水线上下文和Active Choice参数脚本的运行环境不同:env对象是流水线专属的上下文变量,在Active Choice的Groovy脚本里无法直接使用;而直接调用Hudson.instance的方法可能会因为脚本沙箱权限限制无法执行。
针对你的场景,这里提供几种可行的解决方案:
1. 直接通过System.getenv()获取全局环境变量
如果staging_branch是在Jenkins节点配置(系统管理→节点管理→目标节点→配置→环境变量)中设置的全局环境变量,直接用System.getenv()即可获取,无需复杂的Jenkins API调用:
import hudson.model.* def getBuildJobs() { // 直接获取系统环境变量 def stagingBranch = System.getenv("staging_branch") // 变量为空时返回空列表 if (!stagingBranch) { return [] } def buildJobs = [] def targetFolder = "myMultiBranchPipeline" Hudson.instance.getAllItems(Job.class).each { job -> if (job.fullName.contains(targetFolder) && job.name.contains(stagingBranch)) { // 替换分支名中的URL编码斜杠 buildJobs.add(job.name.replace("%2F", "/")) } } return buildJobs } // 返回结果给Active Choice参数 return getBuildJobs()
2. 访问全局参数插件配置的变量
如果staging_branch是通过Global Parameter插件设置的全局参数,需要通过插件的API来获取:
import hudson.model.* import org.jenkinsci.plugins.globalparameter.GlobalParameterConfiguration def getBuildJobs() { // 获取全局参数配置 def globalParamConfig = GlobalParameterConfiguration.get() if (!globalParamConfig) { return [] } // 查找目标参数 def stagingBranchParam = globalParamConfig.getParameters().find { it.name == "staging_branch" } def stagingBranch = stagingBranchParam?.value if (!stagingBranch) { return [] } def buildJobs = [] def targetFolder = "myMultiBranchPipeline" Hudson.instance.getAllItems(Job.class).each { job -> if (job.fullName.contains(targetFolder) && job.name.contains(stagingBranch)) { buildJobs.add(job.name.replace("%2F", "/")) } } return buildJobs } return getBuildJobs()
关键注意事项
- 脚本沙箱权限:如果运行时报权限相关错误,需要在Jenkins的「系统管理→脚本安全」中授权对应的方法/类(比如
hudson.model.Hudson.getAllItems、System.getenv等)。 - 变量上下文:如果
staging_branch是多分支流水线运行时的动态分支变量(而非全局配置),因为Active Choice参数在流水线触发前执行,此时流水线的分支上下文还未初始化,需要通过触发流水线时手动传递参数、或者用预构建步骤提前注入变量的方式解决。
内容的提问来源于stack exchange,提问作者Chris F
相关产品推荐
相关产品推荐

