mask exit 1 on gitlab ci 脚本函数失败
mask exit 1 on gitlab ci script function failure
我们知道,默认情况下,gitlab ci runners 使用 set -o pipefail
,如 coderwall.com 中所述,此特定选项将管道的退出代码设置为最右边命令的退出代码以非零状态退出,如果管道的所有命令都成功退出则为零。
我们都使用“|| true”语句来防止 gitlab ci 作业在真正的出口 1 上失败(以允许 post 进程失败),例如如果我的 grep
退出 1,但我认为这是正常的,因此我不希望我的工作失败,我写道:
job:
script:
- grep "a" myfile.txt || true
但是当我使用函数而不是命令或脚本时,它不再起作用了:(
使用脚本的工作示例(给我出口 0):
job:
script:
- echo "exit 1" > test
- chmox u+x test
- test || true
使用命令的工作示例(给我出口 0):
job:
script:
- exit 1 || true
带功能的非工作示例(给我出口 1):
job:
script:
- function test { exit 1; }
- test || true
带功能的非工作示例(给我出口 1):
job:
script:
- function test { exit 1; }
- (test || true)
我不明白脚本、命令或函数在处理退出代码时有何不同。
有人有解决办法吗?
最后这不是函数行为的问题,而是函数return代码管理上的错误,确实有必要使用return
而不是[=12] =] 以保证与命令相同的功能。
因此解决方案非常简单,在函数的情况下我必须写:
job:
script:
- function test { return 1; }
- test || true
现在退出代码是 0 :)
我们知道,默认情况下,gitlab ci runners 使用 set -o pipefail
,如 coderwall.com 中所述,此特定选项将管道的退出代码设置为最右边命令的退出代码以非零状态退出,如果管道的所有命令都成功退出则为零。
我们都使用“|| true”语句来防止 gitlab ci 作业在真正的出口 1 上失败(以允许 post 进程失败),例如如果我的 grep
退出 1,但我认为这是正常的,因此我不希望我的工作失败,我写道:
job:
script:
- grep "a" myfile.txt || true
但是当我使用函数而不是命令或脚本时,它不再起作用了:(
使用脚本的工作示例(给我出口 0):
job:
script:
- echo "exit 1" > test
- chmox u+x test
- test || true
使用命令的工作示例(给我出口 0):
job:
script:
- exit 1 || true
带功能的非工作示例(给我出口 1):
job:
script:
- function test { exit 1; }
- test || true
带功能的非工作示例(给我出口 1):
job:
script:
- function test { exit 1; }
- (test || true)
我不明白脚本、命令或函数在处理退出代码时有何不同。
有人有解决办法吗?
最后这不是函数行为的问题,而是函数return代码管理上的错误,确实有必要使用return
而不是[=12] =] 以保证与命令相同的功能。
因此解决方案非常简单,在函数的情况下我必须写:
job:
script:
- function test { return 1; }
- test || true
现在退出代码是 0 :)