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

时间:2019-01-09 16:51:17

标签: continuous-integration automated-tests gitlab powershell-v4.0

我在具有Windows 7和Powershell 4.0的Windows机器上运行gitlab管道。

.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

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

这引起了第二个问题:即使它们可用,也不会创建工件链接(我的测试还是会生成它)。

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

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

在此先感谢您的帮助!

编辑:

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

1 个答案:

答案 0 :(得分:2)

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

您可以使用artifacts:when上载因作业失败或 失败。


工件:何时

source: Gitlab CI yaml reference: artifacts:when

  

在GitLab 8.9和GitLab Runner v1.3.0中引入。

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

可以将

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

  1. on_success-仅在作业成功时上传工件。这是 默认值。
  2. on_failure-仅在工作时上传工件 失败。
  3. always-上载工件,而不考虑作业状态。

示例:

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

job:
  artifacts:
    when: on_failure

allow_failure

顺便说一句:您可以通过allow_failure: true

告诉Gitlab CI在作业失败后继续下一个作业。

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