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
管道命令 运行。例如,echo
和 pwd
仍然有效,但 which
或 ls
无效:
+ 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
的方式。
我的 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
管道命令 运行。例如,echo
和 pwd
仍然有效,但 which
或 ls
无效:
+ 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
的方式。