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
可以设置为以下值之一:
on_success
- 仅在作业成功时上传工件。这是
默认值。
on_failure
- 仅在工作时上传工件
失败。
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
我在装有 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
可以设置为以下值之一:
on_success
- 仅在作业成功时上传工件。这是 默认值。on_failure
- 仅在工作时上传工件 失败。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