【问题标题】:mask exit 1 on gitlab ci script function failure在 gitlab ci 脚本功能失败时掩码退出 1
【发布时间】: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)

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

有人有解决办法吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    现在退出代码是 0 :)

    【讨论】:

      猜你喜欢
      • 2021-07-08
      • 1970-01-01
      • 2021-07-27
      • 2023-03-22
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 2021-11-23
      相关资源
      最近更新 更多