为了通过在gitlab上托管的EmberJS项目上的每个拉取请求要求进行单元测试来增加测试覆盖率,我希望管道在覆盖率没有增加的情况下失败。
我可以使用istanbul获取coverage输出,并使用以下正则表达式获取正确显示的coverage徽章:
并使用此gitlab-ci.yml
:
image: sergiolepore/ember-cli
before_script:
- yarn --ignore-engines
- bower --allow-root install
"Ember Unit Tests":
script:
- COVERAGE=true npm test -- --filter=Unit
- grep -o '"pct":\d*\.\d*' coverage/coverage-summary.json | head -1
如果PR中的覆盖率降低,如何使下一个管道失败?
答案 0 :(得分:0)
在深入研究https://docs.gitlab.com/ee/ci/yaml/之后,这是我找到的解决方案:
该管道将使用artifacts
存储作业之间coverage/.current
下的覆盖率
"Ember Unit Tests":
artifacts:
paths:
- coverage/.current
script:
- COVERAGE=true yarn test --filter=Unit
after_script:
- grep -o <regex> coverage.json >> coverage/.current
如果覆盖范围减少,只需返回一个非零的退出代码(谢谢勒克斯!)
"Increase Coverage":
before_script:
- MAX=`if [ -f coverage/.max ] ; then cat coverage/.max ; else echo 00.00 ; fi`
- CURRENT=`cat coverage/.current`
script: if [[ $CURRENT < $MAX ]] ; then exit 1 ; fi
"Update Max Coverage":
except:
- pushes
before_script:
- NEW_MAX=`cat coverage/.current`
script: echo $NEW_MAX > coverage/.max
使用stages依次运行这三个管道,不要忘记在管道之间缓存“最大”覆盖率:
cache:
paths:
- coverage/.max