You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:27:20