Gitlab runner in docker '$ yes | true' returns 出口 1
Gitlab runner in docker '$ yes | true' returns with exit 1
运行 .gitlab 中的这个命令-ci.yml:
task:
script:
- yes | true
- yes | someOtherCommandWhichNeedsYOrN
Returns:
$ yes | true
ERROR: Job failed: exit status 1
任何线索、想法为什么会发生或如何调试?
设置:
docker
中的 Gitlab runner
还不能评论。
我会将脚本提取到一个文件中,然后 运行 从管道中提取该文件,其中包含一些调试内容,看看您是否可以重现它。
确保你能到达而不是越过相关线路。
我可能会尝试以下方法来获取更多信息?
( set -x ; yes | true ; echo status: "${PIPESTATUS[@]}" )
查看文件中是否有一些奇怪的字符或设置了一些奇怪的模式。
确保你是正确的shell,真正可以内置所以值得检查。
祝你好运。
如果 运行 set -o pipefail
,shell 管道中任何阶段的故障将导致整个管道被视为失败。当 yes
尝试写入 stdout 但其 stdin 与 stdout 连接的程序未读取时,这将导致 EPIPE
信号——因此,这是一个预期的失败消息, shell 通常会忽略(有利于仅将管道的最后一个组件视为对该管道的退出状态很重要)。
使用 set +o pipefail
为当前脚本的其余部分关闭此功能
明确忽略单个失败:{ yes || :; } | true
运行 .gitlab 中的这个命令-ci.yml:
task:
script:
- yes | true
- yes | someOtherCommandWhichNeedsYOrN
Returns:
$ yes | true
ERROR: Job failed: exit status 1
任何线索、想法为什么会发生或如何调试?
设置: docker
中的 Gitlab runner还不能评论。
我会将脚本提取到一个文件中,然后 运行 从管道中提取该文件,其中包含一些调试内容,看看您是否可以重现它。
确保你能到达而不是越过相关线路。
我可能会尝试以下方法来获取更多信息?
( set -x ; yes | true ; echo status: "${PIPESTATUS[@]}" )
查看文件中是否有一些奇怪的字符或设置了一些奇怪的模式。
确保你是正确的shell,真正可以内置所以值得检查。
祝你好运。
如果 运行 set -o pipefail
,shell 管道中任何阶段的故障将导致整个管道被视为失败。当 yes
尝试写入 stdout 但其 stdin 与 stdout 连接的程序未读取时,这将导致 EPIPE
信号——因此,这是一个预期的失败消息, shell 通常会忽略(有利于仅将管道的最后一个组件视为对该管道的退出状态很重要)。
使用
set +o pipefail
为当前脚本的其余部分关闭此功能
明确忽略单个失败:
{ yes || :; } | true