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

如何在Jenkins Pipeline中用环境变量赋值自定义变量

Jenkins Pipeline 自定义变量绑定 BUILD_NUMBER 解决方案

直接全局绑定(无需script块)

如果只是单纯将BUILD_NUMBER赋值给自定义变量,直接在声明式Pipeline的environment块中定义即可,变量会全局生效,所有stage都能直接引用:

pipeline {
    agent any
    environment {
        // 直接通过字符串插值绑定BUILD_NUMBER到自定义变量
        JENKINBUILD = "${BUILD_NUMBER}"
    }
    stages {
        stage('验证变量') {
            steps {
                echo "内置BUILD_NUMBER: ${BUILD_NUMBER}"
                echo "自定义变量JENKINBUILD: ${JENKINBUILD}"
            }
        }
    }
}

需要处理变量时的写法(仅一次script块)

如果需要对BUILD_NUMBER做额外处理(比如加前缀、格式转换),可以在environment块内使用单个script块完成,无需在每个stage中重复添加:

pipeline {
    agent any
    environment {
        JENKINBUILD = script {
            // 示例:给BUILD_NUMBER添加前缀
            return "PROD-BUILD-${BUILD_NUMBER}"
        }
    }
    stages {
        stage('验证处理后变量') {
            steps {
                echo "内置BUILD_NUMBER: ${BUILD_NUMBER}"
                echo "处理后的自定义变量: ${JENKINBUILD}"
            }
        }
    }
}

常见问题说明

  1. 为什么之前的函数调用会报错?
    声明式Pipeline的environment块仅支持键值对或特定内置函数(如credentials()),直接调用自定义函数会触发编译错误,不要在这里放业务逻辑函数。

  2. 为什么def a = ${BUILD_NUMBER}不行?
    这是错误的语法:def属于脚本式变量声明,在声明式Pipeline中必须包裹在script块内;且变量赋值不需要用${}包裹,正确写法是def a = BUILD_NUMBER(但这种方式是局部变量,无法全局共享,不推荐)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:10:20