我们有一个在 Gitlab 中管理的项目,带有用于构建和测试(pytest、Google 测试)的 CI 管道。我们在 Google 测试中的两三个测试用例失败了。但Gitlab认为测试阶段是成功的。是因为成功率超过90%(任意值)吗?如果我们没有获得 100% 的成功,有没有办法让阶段(以及整个管道)失败?
Here is a screenshot of the pipeline summary:
这是该阶段的 yml 脚本:
test_unit_test:
stage: test
needs: ["build", "build_unit_test"]
image: $DOCKER_IMAGE
rules:
- if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
script: |
ZIPNAME=`cat _VERSION_.txt`
./scripts/gitlab-ci/stage-unittests.sh test_unit_test_report.xml $ZIPNAME
artifacts:
reports:
junit: test_unit_test_report.xml
expire_in: 1 week
感谢您的任何帮助。
问候。
Gitlab CI/CD 工作不在乎what脚本区域正在执行(因此他们不会查看例如测试通过百分比)。他们唯一用来确定作业是否通过或失败的是退出代码 https://stackoverflow.com/a/1535733/2307873和allow_failure https://docs.gitlab.com/ee/ci/yaml/#allow_failure关键词。
在每个命令之后before_script
, script
, and after_script
执行完部分后,Gitlab Runner 检查命令的退出代码以查看是否是0
。如果它不为零,则该命令被视为失败,并且如果allow_failure
关键字未设置为true
为了工作,工作失败了。
所以,对于你的工作,即使tests失败,不知何故脚本存在,退出代码为 0,这意味着命令本身成功完成。本例中的命令是:
ZIPNAME=$(cat _VERSION_.txt)
./scripts/gitlab-ci/stage-unittests.sh test_unit_test_report.xml $ZIPNAME
NOTE:我将你的反引号“`”替换为$(command)
语法解释here https://unix.stackexchange.com/a/147424/347720它做同样的事情(执行此命令),但比“命令”有一些优势,包括嵌套和更容易在 markdown 中使用,其中“”表示代码格式。
所以,既然你正在调用一个脚本(./scripts/gitlab-ci/stage-unittests.sh
)来运行测试,该脚本本身已成功完成,因此作业已成功完成。查看该脚本,看看您是否能说出为什么即使测试失败,它也能成功完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)