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

如何在Active Choice参数脚本中获取JOB_BASE_NAME或JOB_NAME

问题分析与解决方案

核心问题

  1. env.JOB_BASE_NAME不可用:在Active Choice参数的脚本阶段,Pipeline的env环境变量尚未初始化,因此无法直接访问。
  2. jenkinsProject使用方式错误:你尝试通过getDisplayName()拆分获取名称的方式不可靠,且脚本未返回最终的选项列表(这是Active Choice脚本的必要要求)。
  3. 权限限制:Sandbox模式下,部分Jenkins对象的方法需要提前授权。

正确实现代码

pipeline {
    agent {
        label "slave-2"
    }

    parameters {
        activeChoice choiceType: 'PT_SINGLE_SELECT', 
                     description: '根据Job名称动态生成选项', 
                     filterLength: 1, 
                     filterable: false, 
                     name: 'PARAM_NAME', 
                     script: [ 
                         classpath: [], 
                         sandbox: true, 
                         script: '''
                             try {
                                 // 直接通过插件暴露的内置变量jenkinsProject获取JOB_BASE_NAME
                                 def jobBaseName = jenkinsProject.baseName
                                 
                                 // 根据jobBaseName动态生成选项列表,示例逻辑可按需修改
                                 def options = []
                                 if (jobBaseName.startsWith("dev")) {
                                     options = ["dev-测试环境1", "dev-测试环境2"]
                                 } else if (jobBaseName.startsWith("prod")) {
                                     options = ["prod-生产环境1", "prod-生产环境2"]
                                 } else {
                                     options = ["默认选项1", "默认选项2"]
                                 }
                                 return options
                             } catch(e) {
                                 // 异常时返回错误提示
                                 return ["错误: ${e.toString()}"] 
                             }
                         ''' 
                     ] 
    }

    stages {
        stage('验证参数') {
            steps {
                echo "选中的参数: ${params.PARAM_NAME}"
            }
        }
    }
}

关键注意事项

  • 直接使用jenkinsProject.baseName:这是Active Choice插件官方支持的内置变量,能直接获取当前Job的JOB_BASE_NAME,无需拆分显示名,避免路径解析错误。
  • 必须返回选项列表:脚本最后一定要返回一个字符串列表,这是Active Choice生成下拉选项的核心要求,原代码缺少返回逻辑导致无法生成选项。
  • Sandbox权限配置:如果运行时提示权限错误,需在Jenkins全局安全配置的「脚本安全」中,添加以下签名授权:
    • method hudson.model.Item getBaseName
    • 若有其他方法权限问题,根据错误提示添加对应签名即可

内容的提问来源于stack exchange,提问作者Confused Rookie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:18:26