gitlab ci 脚本函数失败时掩码退出 1

lep*_*eil 5 yaml function exit gitlab-ci gitlab-ci-runner

我们知道,默认情况下,gitlab ci runners 使用set -o pipefail,如coderwall.com 中所述,此特定选项将管道的退出代码设置为最右侧命令的退出代码,以非零状态退出,或者如果所有命令都为零管道退出成功。

我们都使用“|| true”语句来防止 gitlab ci 作业在真正的退出 1 上失败(以允许后期处理失败),例如,如果我grep退出 1 但我认为这是正常的,因此我不我不希望我的工作失败,我写道:

job:
  script:
    - grep "a" myfile.txt || true
Run Code Online (Sandbox Code Playgroud)

但是当我使用函数而不是命令或脚本时,它不再起作用了:(

脚本的工作示例(给我退出 0):

job:
  script:
    - echo "exit 1" > test
    - chmox u+x test
    - test || true
Run Code Online (Sandbox Code Playgroud)

命令的工作示例(给我退出 0):

job:
  script:
    - exit 1 || true
Run Code Online (Sandbox Code Playgroud)

具有功能的非工作示例(给我退出 1):

job:
  script:
    - function test { exit 1; }
    - test || true
Run Code Online (Sandbox Code Playgroud)

具有功能的非工作示例(给我退出 1):

job:
  script:
    - function test { exit 1; }
    - (test || true)
Run Code Online (Sandbox Code Playgroud)

我不明白处理退出代码在脚本、命令或函数之间有什么区别。

有没有人有办法解决吗 ?

lep*_*eil 8

最后,这不是函数行为的问题,而是函数返回码管理上的错误,确实有必要使用return而不是exit为了保证与命令相同的功能。

因此,解决方案非常简单,对于我必须编写的函数:

job:
  script:
    - function test { return 1; }
    - test || true
Run Code Online (Sandbox Code Playgroud)

现在退出代码是 0 :)