Jenkinsfile shell 命令没有按预期使用环境变量

Jenkinsfile shell command not using env variables as expected

在我的 Jenkinsfile 中,我想使用 python 脚本动态查找统一版本,如下所示: <pre></p> <pre><code>environment { UNITY_EDITOR = bat(script: "py $WORKSPACE/get_versions.py --unity", returnStdout: true).trim() UNITY_BASE = "C:/Program Files/Unity/Hub/Editor/$UNITY_EDITOR/Editor/Unity.exe" UNITY_WRAPPER = "UnityBatchWrapper -silent-crashes -no-dialogs -batchmode -quit -unityPath \"$UNITY_BASE\"" } post { always { script { echo "Returning license" licenseReturnStatus = bat ( script: "$UNITY_WRAPPER -returnlicense", returnStatus: true ) == 0 } }

从其他 Whosebug 的回答来看,这似乎应该可行,但我的 Jenkins 作业在 post-build 步骤期间出错,因为 $UNITY_WRAPPER 未定义:

groovy.lang.MissingPropertyException: No such property: UNITY_WRAPPER for class: groovy.lang.Binding

我认为批处理步骤是失败的,即使 Jenkins 没有抱怨它。我也试过使用 $env.WORKSPACE 和 %WORKSPACE% 但这也不起作用。 我开始认为 $WORKSPACE 在环境步骤之后才存在...

原来我没有安装 Python 因为它是一个临时的 GCP 构建器而且我还没有更新节点标签。

对于阅读本文时遇到 bat 命令问题的任何人 - 请务必在您的命令前放置一个 @ 符号,例如“@py ...”,否则该命令将在输出中回显。另外 trim 您的输出,因此其中没有 CRLF。