gitlab ci脚本功能失败时屏蔽出口1

时间:2019-01-08 09:12:47

标签: function yaml exit gitlab-ci gitlab-ci-runner

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

我们所有人都使用“ || 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 个答案:

答案 0 :(得分:1)

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

因此,在使用函数的情况下,解决方案非常简单:

job:
  script:
    - function test { return 1; }
    - test || true

现在退出代码为0:)