在 gitlab ci 脚本功能失败时掩码退出 1
Posted
技术标签:
【中文标题】在 gitlab ci 脚本功能失败时掩码退出 1【英文标题】:mask exit 1 on gitlab ci script function failure 【发布时间】:2019-06-02 22:52:27 【问题描述】:我们知道,默认情况下,gitlab ci runners 使用set -o pipefail
,如coderwall.com 中所述,此特定选项将管道的退出代码设置为最右边命令的退出代码,以非零状态退出,或者如果管道的所有命令都成功退出,则为零。
我们都使用“|| true”语句来防止 gitlab ci 作业在真正的出口 1 上失败(以允许后处理失败),例如,如果我的 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)
我不明白处理退出代码在脚本、命令或函数之间有什么区别。
有人有解决办法吗?
【问题讨论】:
【参考方案1】:最后这不是函数的行为问题,而是函数返回码管理的错误,确实有必要使用return
而不是exit
,以保证与一个命令。
因此解决方案非常简单,对于我必须编写的函数:
job:
script:
- function test return 1;
- test || true
现在退出代码是 0 :)
【讨论】:
以上是关于在 gitlab ci 脚本功能失败时掩码退出 1的主要内容,如果未能解决你的问题,请参考以下文章
Gitlab CI/CD 在“清理项目目录和基于文件的变量”时失败,并显示“错误:作业失败:退出代码 1”