我在具有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,也许它有助于更好地理解问题。
答案 0 :(得分:2)
我有同样的问题,但是很容易解决:
您可以使用artifacts:when
上载因作业失败或
失败。
source: Gitlab CI yaml reference: artifacts:when
在GitLab 8.9和GitLab Runner v1.3.0中引入。
artifacts:when
用于在作业失败时或尽管
失败。
artifacts:when
设置为以下值之一:
on_success
-仅在作业成功时上传工件。这是
默认值。 on_failure
-仅在工作时上传工件
失败。 always
-上载工件,而不考虑作业状态。仅在作业失败时上传工件:
job:
artifacts:
when: on_failure
顺便说一句:您可以通过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