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

Jenkins macOS构建无法读取终端及配置文件中配置的环境变量问题求助

Jenkins macOS构建无法读取终端及配置文件中配置的环境变量问题求助

我最近遇到了一个Jenkins构建的棘手问题,想请大家帮忙出出主意:Jenkins在macOS代理上构建时,无法读取我已经在终端以及.bashrc、.zshrc里配置好的环境变量。

具体情况是这样的:

  • 我已经通过终端设置了所有构建需要的环境变量,并且把它们正确写入了.bashrc和.zshrc配置文件中;
  • 手动在终端运行build.sh脚本时,一切都很顺畅,完全没有问题;
  • 但切换到Jenkins构建后,这些环境变量就像“消失”了一样,完全读不到。

我用下面这个Jenkinsfile做了测试:

pipeline {
    agent {
        label 'MacAgent-AppleSilicon_Test'
    }
    options {
        timestamps()
        timeout(time: 4, unit: 'HOURS')
        disableConcurrentBuilds()
    }
    stages {
        stage ('Jenkins') {
            steps {
                sh '''
                    $SHELL
                    whoami
                    brew list
                    echo $HOME
                    echo $PATH
                    echo $NVM_DIR
                    echo $JAVA_HOME
                    echo $ANDROID_HOME
                    echo $ANDROID_SDK_ROOT
                    echo $ANDROID_NDK_HOME
                    nvm ls
                '''
            }
        }
    }
}

执行后只有这几项有输出:

  • $SHELL => /bin/zsh
  • whoami => ec2-user
  • $PATH => /usr/bin:/bin:/usr/sbin:/sbin

其他所有变量的echo结果都是空的,nvm ls还直接报错nvm: command not found。

我的Jenkins代理是通过plist文件启动的,原来的配置内容如下:

<key>Label</key>
<string>com.jenkins.ci</string>
<key>UserName</key>
<string>ec2-user</string>
<key>SessionCreate</key>
<key>ProgramArguments</key>
<array>
<string>java</string>
<string>-Djava.awt.headless=true</string>
<string>-jar</string>
<string>/Users/ec2-user/Jenkins/remoting.jar</string>
<string>-jnlpUrl</string>
<string>http://ip-of-jenkins-master/computer/mac_vm/slave-agent.jnlp</string>
</array>
<key>KeepAlive</key>
<key>StandardOutPath</key>
<string>/Users/ec2-user/Jenkins/stdout.log</string>
<key>StandardErrorPath</key>
<string>/Users/ec2-user/Jenkins/error.log</string>

目前我找到了一个临时的解决办法:在Jenkins的「节点 -> Slave_Agent -> 配置 -> 节点属性/环境变量」里手动添加这些变量,这样构建就能正常运行了。但新的问题又出现了——只要我运行一次构建,macOS代理上的.bashrc和.zshrc文件就会被自动删除,这实在太奇怪了。

我想请教各位,有没有什么办法能让Jenkins构建直接读取我已经在终端和配置文件里设置好的环境变量,而不用依赖节点属性里的手动配置?


[编辑] 后来我尝试修改了plist文件,添加了EnvironmentVariables属性,现在的配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.jenkins.ci</string>
<key>ProgramArguments</key>
<array>
<string>java</string>
<string>-Djava.awt.headless=true</string>
<string>-jar</string>
<string>/Users/ec2-user/Jenkins/remoting.jar</string>
<string>-jnlpUrl</string>
<string>http://ip-of-jenkins-master/computer/mac_vm/slave-agent.jnlp</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>EnvironmentVariables</key>
<dict>
<key>JAVA_HOME</key>
<string>/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home</string>
</dict>
</dict>
</plist>

备注:内容来源于stack exchange,提问作者Mishovski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:29:06