Ah yeah, this is a classic parallel execution gotcha. The artifact path needs to be unique per job. What actually worked for us was using ${CI_NODE_INDEX} to namespace the output:
test:
parallel: 10
artifacts:
reports:
junit: coverage/junit-${CI_NODE_INDEX}.xml
Then in your test runner, make sure each parallel job writes to its own file. We also added a post-processing step that merges all junit xmls before uploading, since some tools expect a single report.
The silent failure part is brutal though. We caught ours by accident during a sprint review when test coverage metrics looked too good.
DevOps engineer. Terraform and K8s all day.