我有一个脚本,在其中检查执行代码(0 分配给成功和 1 分配给失败)。我使用 if-else 语句来检查执行代码是 0 还是 1。
如果是 0 我想分配文本成功给变量 RESULT。否则分配文本失败到一个变量结果。
注意:我需要在其他地方使用 RESULT 。
这是我的代码:
#!/usr/bin/env bash
set -eo pipefail
RESULT="SUCCESS"
if [ "${STATUS}" != "0" ]; then
RESULT="FAILURE"
else
RESULT="SUCCESS"
fi
cat "${STATUS}"
echo
echo ${RESULT}
然而,看起来无论我发送 0 还是 1 都无关紧要,结果总是失败。这是输出:
[e2e-st] 0
[e2e-st]
[e2e-st] FAILURE
我期望得到 0成功,相反我得到 0失败。
关于我做错了什么或者我可以采取哪些不同的做法有什么建议吗?
在这里获得帮助和解决方案后:
- name: STATUS
value: $(steps.step-run-script.exitCode.path)
script: |
#!/usr/bin/env bash
set -eo pipefail
echo "STATUS=$STATUS"
ls -l "$STATUS"
STATUSVALUE=$(cat "$STATUS")
echo ${STATUSVALUE}
if [ "$STATUSVALUE" -eq 0 ]; then
echo ok
RESULT="SUCCESS"
echo ${STATUSVALUE}
echo ${RESULT}
else
echo failed...
RESULT="FAILURE"
echo ${STATUSVALUE}
echo ${RESULT}
fi
这就是我得到的:
[e2e-st : send-test-report-and-status-to-jira-comment] STATUS=/tekton/steps/step-run-script/exitCode
[e2e-st : send-test-report-and-status-to-jira-comment] -rw-r--r--. 1 1000 1002340000 1 Mar 10 14:03 /tekton/steps/step-run-script/exitCode
[e2e-st : send-test-report-and-status-to-jira-comment] 0
[e2e-st : send-test-report-and-status-to-jira-comment] ok
[e2e-st : send-test-report-and-status-to-jira-comment] 0
[e2e-st : send-test-report-and-status-to-jira-comment] SUCCESS
我的测试失败的另一次运行:
[e2e-st : send-test-report-and-status-to-jira-comment] STATUS=/tekton/steps/step-run-script/exitCode
[e2e-st : send-test-report-and-status-to-jira-comment] -rw-r--r--. 1 1000 1002340000 1 Mar 10 14:05 /tekton/steps/step-run-script/exitCode
[e2e-st : send-test-report-and-status-to-jira-comment] 1
[e2e-st : send-test-report-and-status-to-jira-comment] failed...
[e2e-st : send-test-report-and-status-to-jira-comment] 1
[e2e-st : send-test-report-and-status-to-jira-comment] FAILURE
十分感谢你的帮助!一切都按预期进行。
答案1
在不了解 OpenShift 或 Tekton 的任何情况下,“steps.step-run-script.exitCode.path”中的“path”一词似乎表示一个文件名,事实也是如此cat $STATUS
。
把类似的东西
echo "STATUS=$STATUS"
ls -l "$STATUS"
在脚本中查看变量的值$STATUS
是什么,并查看文件。
文件的内容不会自动复制到保存文件的变量中姓名文件的名称,因此您需要使用 egcat
来读取它,就像稍后在脚本中所做的那样。例如
STATUSVALUE=$(cat "$STATUS")
if [ "$STATUSVALUE" -eq 0 ]; then
echo ok
else
echo failed...
fi
如果可以的话,您还可以考虑重命名变量,这样STATUSFILE
可能更具描述性。