function - gitlab ci 脚本功能失败时屏蔽 exit 1

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

我们知道,默认情况下,gitlab ci runners 使用 set -o pipelinefail,如 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)

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

有人有解决办法吗?

最佳答案

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

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

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

现在退出代码是 0 :)

关于function - gitlab ci 脚本功能失败时屏蔽 exit 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54088537/

相关文章:

javascript - 为什么我的函数调用不起作用?

go - 在Golang(yaml)中将特定结构解码为字符串

php - 如何动态处理 yaml 文件中的 UNIX/Windows 目录分隔符

c - 当我用中断终止正在运行的 Linux 进程时,会运行哪些清理例程?

android - 如何关闭应用程序?

javascript - 无法设置/读取未定义的属性

python - 修复 Pygame 玩家输入响应时间

function - Lua 中的三元运算符(函数)

parsing - 如何在 golang yaml 解析器中保留空格和换行符?

android - Phonegap Cordova 1.7.0 完全退出 app android