Jenkins Pipeline里怎么正确引用环境变量?

苗苗 阅读 148

我在写Jenkinsfile的时候,想用环境变量拼接路径,但总是取不到值。

比如我定义了env.WORKSPACE,然后在sh里用${WORKSPACE},结果报错说变量未定义。是不是语法写错了?

pipeline {
    agent any
    environment {
        BUILD_DIR = "${WORKSPACE}/build"
    }
    stages {
        stage('Build') {
            steps {
                sh 'echo "Building in $BUILD_DIR"'
            }
        }
    }
}
我来解答 赞 9 收藏
二维码
手机扫码查看
2 条解答
 ___忠娟
在Jenkins Pipeline里引用环境变量,你得注意Groovy脚本和shell脚本的差异。env.WORKSPACE是Groovy里的写法,但在sh步骤里要用shell的方式引用。

首先把WORKSPACE缓存起来,在environment块里用env对象获取:

pipeline {
agent any
environment {
WORKSPACE = "${env.WORKSPACE}"
BUILD_DIR = "${WORKSPACE}/build"
}
stages {
stage('Build') {
steps {
sh 'echo "Building in ${BUILD_DIR}"'
}
}
}
}


这里的关键是在environment块里先从env对象读取WORKSPACE值,然后其他地方就能正常引用了。记得shell里要使用${}而不是$符号来确保变量正确解析。

说实话这设计有点烦人,但为了保证跨平台兼容性也只能这么写了。反正记住一条原则:Pipeline配置里用env.前缀,shell命令里直接用${}就对了。
点赞
2026-03-27 16:10
一诗雯
一诗雯 Lv1
问题出在 environment 块里引用 WORKSPACE 的方式不对。

在 Declarative Pipeline 的 environment 块中,要用 env.WORKSPACE 而不是 ${WORKSPACE}。因为 environment 块是最先解析的,这时候普通的 ${VAR} 语法还没生效。

改成这样:

pipeline {
agent any
environment {
BUILD_DIR = "${env.WORKSPACE}/build"
}
stages {
stage('Build') {
steps {
sh 'echo "Building in $BUILD_DIR"'
}
}
}
}


或者更直接点,steps 里面直接用:

pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'echo "Building in ${env.WORKSPACE}/build"'
}
}
}
}


记住 Jenkins Pipeline 里访问环境变量就两种方式:
- 在 shell 命令里用 $VAR${VAR}
- 在 Groovy 代码里用 env.VAR

你之前在 environment 块里用的是 ${WORKSPACE},这在 Jenkins Pipeline 上下文里不识别,得写成 env.WORKSPACE
点赞
2026-03-16 16:00