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。
在我的 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。