相关疑难解决方法(0)

GitLab CI:即使脚本失败,如何继续工作

我的管道中有一份工作,其中有一个包含两个非常重要步骤的脚本:

  • mvn test 对我的代码运行 JUnit 测试
  • junit2html 将测试的 XML 结果转换为 HTML 格式(查看结果的唯一可能方法,因为我的管道不是通过 MR 完成的)作为工件上传到 GitLab
  • docker rm 销毁之前在管道中创建的容器

我的问题是,当我的测试失败时,脚本会立即停止在mvn test,因此junit2html永远不会到达该步骤,这意味着在失败的情况下永远不会上传测试结果,也永远docker rm不会执行,因此容器仍然存在并弄乱了后续管道其结果。

我想要的是即使脚本在某些时候失败,也能够将工作持续到最后。基本上,该作业在 GitLab CI / CD 中仍应算作失败,但应执行其整个脚本。我该如何配置?

gitlab gitlab-ci

24
推荐指数
1
解决办法
2万
查看次数

是否可以允许 CI/CD 作业中的脚本失败?

可以允许整个作业失败

job1:
  stage: test
  script:
    - execute_script_that_will_fail
  allow_failure: true
Run Code Online (Sandbox Code Playgroud)

是否有可能在一系列脚本中,有一个允许失败(而其他则不允许)?

job1:
  stage: test
  script:
    - execute_script_that_MAY_fail_and_should_be_marked_somehow_in_this_config_as_such
    - execute_script_that_MUST_NOT_fail
Run Code Online (Sandbox Code Playgroud)

理由是可能存在相关的脚本,应该组合在一起并且按顺序排列,并且只允许其中一些脚本失败。

例如,docker 部署具有 a build(不得失败)、stop容器的 a(如果容器未运行,则可能会失败)和 a run(不得失败)。

我当前的解决方法是将其分成单独的工作,但这是一个丑陋的黑客:

stages:
  - one
  - two
  - three

one:
  stage: one
  script:
    - execute_script_that_MUST_NOT_fail

two:
  stage: two
  script:
    - execute_script_that_MAY_fail
  allow_failure: true

three:
  stage: three
  script:
    - execute_script_that_MUST_NOT_fail
Run Code Online (Sandbox Code Playgroud)

gitlab gitlab-ci

2
推荐指数
1
解决办法
3451
查看次数

标签 统计

gitlab ×2

gitlab-ci ×2