Gitlab 管道测试阶段失败并创建工件

Gitlab pipeline test stage to fail AND create artifacts anyway

我在装有 Windows 7 和 powershell 4.0 的 windows 机器上有一个 gitlab 管道 运行ning。

.yaml 具有典型的 3 个阶段:构建、测试和部署。

对于第二阶段,我想执行一些简单的测试,生成一个日志文件,该文件在测试阶段完成后应该可用。

这里是测试的脚本部分:

script:
  - '$exitCode = (start-process C:\app_versions\app_20181211\bin\app.exe -PassThru -Wait).ExitCode'
  - 'cat .\TestLogs\BasicFunctionsTestPlan.log'
  - 'exit $exitCode'
artifacts:
  paths:
    - .\TestLogs
  expire_in: 1 year

这里我遇到了一个问题,在测试 运行 完成后,即使测试本身失败了,阶段也总是成功完成。然后我不得不强制脚本退出并返回一个错误代码,以防应用程序告诉我测试失败。

这导致了第二个问题:工件 link 即使可用也不会创建(无论如何我的测试都会生成)。

可能如果我知道如何以更干净的方式告诉 gitlab 测试失败了,这些工件无论如何都可用。

我同意日志文件不是人工制品,但我想保留该文件以检查测试的执行情况,也许有更好的方法来保存该文件。

在此先感谢您的帮助!

编辑:

看起来有更多人遇到同样的问题here,也许这有助于更好地理解问题。

我有同样的问题,但很容易解决:

您可以使用 artifacts:when 在作业失败时或尽管 失败。


工件:当

source: Gitlab CI yaml reference: artifacts:when

Introduced in GitLab 8.9 and GitLab Runner v1.3.0.

artifacts:when 用于在作业失败时或尽管 失败。

artifacts:when 可以设置为以下值之一:

  1. on_success - 仅在作业成功时上传工件。这是 默认值。
  2. on_failure - 仅在工作时上传工件 失败。
  3. always - 无论作业状态如何都上传工件。

示例:

仅在作业失败时上传工件:

job:
  artifacts:
    when: on_failure

allow_failure

顺便说一句:你可以告诉 Gitlab CI 在工作失败后继续下一个工作 allow_failure: true

source: Gitlab CI yaml Reference: allow_failure

job1:
  stage: test
  script:
    - execute_script_that_will_fail
  allow_failure: true

结合起来看起来像这样:

job1:
  stage: test
  script:
    - execute_script_that_will_fail
  allow_failure: true
  artifacts:
    when: always # or 'on_failure'
    paths:
    - resulting_artifacts