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

Jenkins注入全局环境变量导致容器内Python执行环境变量冲突

问题:Jenkins容器环境变量冲突导致Python脚本报错

Jenkins会自动将全局环境变量注入到构建容器中,引发环境变量冲突:执行Python脚本时,脚本期望WORKSPACE环境变量指向${env.WORKSPACE}/boot_images,但实际被Jenkins注入的全局WORKSPACE(即Jenkins工作目录)覆盖,导致脚本触发路径检查报错。

Jenkinsfile 代码

stage('Build') {
    agent {
        docker { 
            label '1.63slave'
            image 'linux-c4702-image'
            args  '-u root:root'
        }
    }
    when {
        expression {params.build == 'yes'}
        beforeAgent true
    }
    steps {
        script{
            sh '''#!/bin/bash
                    
                    cd ${env.WORKSPACE} && mv -f /home/nanopb-0.3.6-linux-x86.tar.gz ${env.WORKSPACE}/adsp_proc/ssc/tools
                    cd ${env.WORKSPACE}/adsp_proc/ssc/tools && tar -zxvf nanopb-0.3.6-linux-x86.tar.gz
                    cd ${env.WORKSPACE}/adsp_proc
                    pwd
                    python ssc/build/config_nanopb_dependency.py -f nanopb-0.3.6-linux-x86
                    python ./build/build.py -c sm6150 -o all -f aDSP
                    cd ${env.WORKSPACE} && source set_env.sh
                    cd ${env.WORKSPACE} && sh buildNonhlos.sh all
                    cd ${env.WORKSPACE} && bitbake qti-multimedia-image
                    cd ${env.WORKSPACE} && sh buildNonhlos.sh nonhlos
                '''
        }
    }
}

Python报错代码片段

#Check that boot_images folder exists, there are dependencies on this
if BOOT_IMAGES_DIR not in os.environ["WORKSPACE"]:
    raise NameError("ERROR: buildex::setup_environment: " + \
    "Build root folder 'boot_images' is missing. Please ensure this folder exist.")

解决方案

1. 在执行Python前临时覆盖环境变量

在Shell脚本中,执行Python命令前手动导出正确的WORKSPACE路径,仅在当前Shell会话生效,不会影响Jenkins全局变量:

cd ${env.WORKSPACE}/adsp_proc
# 覆盖WORKSPACE为脚本需要的路径
export WORKSPACE="${env.WORKSPACE}/boot_images"
python ssc/build/config_nanopb_dependency.py -f nanopb-0.3.6-linux-x86
python ./build/build.py -c sm6150 -o all -f aDSP
# 后续命令若需原Jenkins工作目录,直接使用绝对路径或改回变量
cd ${env.WORKSPACE} && source set_env.sh

2. 修改Python脚本,脱离对WORKSPACE的依赖

直接在脚本中基于Jenkins注入的WORKSPACE拼接目标路径,彻底避免环境变量冲突:

import os
# 基于Jenkins的WORKSPACE拼接boot_images路径
target_workspace = os.path.join(os.environ["WORKSPACE"], "boot_images")
if BOOT_IMAGES_DIR not in target_workspace:
    raise NameError("ERROR: buildex::setup_environment: Build root folder 'boot_images' is missing. Please ensure this folder exist.")

3. 使用Jenkins withEnv 块覆盖容器内环境变量

确保withEnv块包裹在容器执行的步骤中,覆盖容器内的WORKSPACE变量:

steps {
    script{
        withEnv(["WORKSPACE=${env.WORKSPACE}/boot_images"]) {
            sh '''#!/bin/bash
                    cd ${WORKSPACE}/../adsp_proc && pwd
                    python ssc/build/config_nanopb_dependency.py -f nanopb-0.3.6-linux-x86
                    python ./build/build.py -c sm6150 -o all -f aDSP
                    # 后续命令需原Jenkins工作目录时,使用${env.WORKSPACE}
                    cd ${env.WORKSPACE} && source set_env.sh
                    cd ${env.WORKSPACE} && sh buildNonhlos.sh all
                    cd ${env.WORKSPACE} && bitbake qti-multimedia-image
                    cd ${env.WORKSPACE} && sh buildNonhlos.sh nonhlos
                '''
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:20:46