Jenkins Pipeline sh:找不到命令 - 某些命令现在不可用吗?

Jenkins Pipeline sh: command not found - are certain commands not available now?

我的 Jenkins 管道中有以下阶段:

stage('Update Android SDK') {
    withEnv(['ANDROID_HOME=/Users/Shared/android-sdk-macosx',
             'PATH=$ANDROID_HOME:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH'
    ]) {
        sh 'echo y | android update sdk --no-ui --all --filter platform,tool,platform-tool,extra-android-m2repository'
}

这曾经工作得很好。但是,我刚刚更新到 Jenkins 2.44 和最新的 Pipeline 插件,从那时起,android 命令不再 运行。这是来自詹金斯日志的错误消息:

+ android update sdk --no-ui --all --filter platform,tool,platform-tool,extra-android-m2repository
/Users/Jenkins/.jenkins/workspace/d_release-3-0-3dummy.1gpbab-FJUYVCADYU5YVX7LNYATQTVORNDAKFSYICGSZRW4QXTUW5E2OMEQ@tmp/durable-f249f287/script.sh: line 2: android: command not found

而且不仅仅是 android。在我看来,某些安全设置已更改或发生其他情况,某些命令无法再通过 sh 管道命令 运行。例如,echopwd 仍然有效,但 whichls 无效:

+ echo /Users/Shared/android-sdk-macosx
/Users/Shared/android-sdk-macosx

++ which android
/Users/Jenkins/.jenkins/workspace/d_rel/script.sh: line 2: which: command not found
+ echo
[Pipeline] sh
[d_rel] Running shell script
+ pwd
/Users/Jenkins/.jenkins/workspace/d_rel
[Pipeline] sh
[d_rel] Running shell script
+ ls -la /Users/Shared/
/Users/Jenkins/.jenkins/workspace/d_rel/script.sh: line 2: ls: command not found

(我已将上面代码段中的字符串 d_release-3-0-3dummy.1gpbab-FJUYVCADYU5YVX7LNYATQTVORNDAKFSYICGSZRW4QXTUW5E2OMEQ@tmp/durable-f249f287 替换为 d_rel 以提高可读性。)

发生了什么变化?如果现在某些命令受到限制,我可以做些什么来启用所有命令 运行?

尝试结构如下:

withEnv(['ANDROID_HOME=/Users/Shared/android-sdk-macosx',]) {
    withEnv(["PATH+ADK=${env.ANDROID_HOME}/tools:${env.ANDROID_HOME}/platform-tools"]) {
        sh 'echo y | android update sdk --no-ui --all --filter platform,tool,platform-tool,extra-android-m2repository'
    }
}

我认为 $ANDROID_HOME 否则无法正确展开。使用刚刚定义的变量的 example 在官方管道示例文档中。

PATH+XYZ 似乎是 suggested 追加到 $PATH 的方式。