Jenkins 构建无法读取或识别 macOS 中 Jenkins 构建的所有环境变量

Jenkins 构建无法读取或识别 macOS 中 Jenkins 构建的所有环境变量

我在读取或识别 Jenkins 构建中的所有环境变量时遇到问题。

所有这些必要的变量都已通过终端设置,并正确写入 .bashrc 和 .zshrc 中。

我的 build.sh 需要设置这些环境变量,当我手动构建(通过终端运行 build.sh)时 - 一切都非常顺利。

我遇到的问题是,当我尝试使用 Jenkins 进行构建时,它无法“读取/识别”那些已设置的环境变量。当我使用以下 Jenkinsfile 开始构建时,我没有得到任何预期的东西(就像我在终端中得到的那样)。

Jenkins文件:

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

其他所有内容均返回空回显,并且对于 nvm ls - 它失败,因为未找到 nvm:命令。

这是我的.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> 

我已经找到了一个目前可行的解决方案,我已经在 J​​enkins 上设置了这些环境变量 -节点 -> Slave_Agent -> 配置 -> 节点属性/环境变量

目前这有效,但是一旦我开始至少一个构建,.bashrc 和 .zshrc 就会从 macOS 代理中删除/消失。

非常感谢关于如何使 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>

答案1

我猜测问题可能是因为 macOS Agents 不作为 shell 脚本运行,所以 .bashrc 和 .zshrc 没有运行。

也许你需要EnvironmentVariables在 .plist 中添加一个属性?我在 中找到了这个man launchd.plist

     EnvironmentVariables <dictionary of strings>
     This optional key is used to specify additional environmental variables to
     be set before running the job. Each key in the dictionary is the name of an
     environment variable, with the corresponding value being a string
     representing the desired value.  NOTE: Values other than strings will be
     ignored.

答案2

我找到的解决方案是添加环境变量,/etc/profile然后获取该文件。

sh '''
  source /etc/profile
  chmod +x ./build.sh
  ./build.sh
'''

无法弄清楚为什么获取 .bashrc 和 .zshrc 不起作用。

相关内容