2017-10-11 01:59:34 -04:00
|
|
|
# GitLab tests in the Continuous Integration (CI) context
|
|
|
|
|
2019-07-08 07:07:07 -04:00
|
|
|
## Test suite parallelization on the CI
|
2017-10-11 01:59:34 -04:00
|
|
|
|
|
|
|
Our current CI parallelization setup is as follows:
|
|
|
|
|
2019-09-27 11:06:16 -04:00
|
|
|
1. The `retrieve-tests-metadata` job in the `prepare` stage ensures we have a
|
|
|
|
`knapsack/report-master.json` file:
|
|
|
|
- The `knapsack/report-master.json` file is fetched from S3, if it's not here
|
|
|
|
we initialize the file with `{}`.
|
|
|
|
1. Each `[rspec|rspec-ee] [unit|integration|system|geo] n m` job are run with
|
|
|
|
`knapsack rspec` and should have an evenly distributed share of tests:
|
|
|
|
- It works because the jobs have access to the `knapsack/report-master.json`
|
|
|
|
since the "artifacts from all previous stages are passed by default".
|
2018-09-06 12:52:18 -04:00
|
|
|
- the jobs set their own report path to
|
2019-09-27 11:06:16 -04:00
|
|
|
`"knapsack/${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json"`.
|
2018-09-06 12:52:18 -04:00
|
|
|
- if knapsack is doing its job, test files that are run should be listed under
|
|
|
|
`Report specs`, not under `Leftover specs`.
|
2019-09-27 11:06:16 -04:00
|
|
|
1. The `update-tests-metadata` job (which only runs on scheduled pipelines for
|
|
|
|
[the canonical project](https://gitlab.com/gitlab-org/gitlab) takes all the
|
|
|
|
`knapsack/rspec*_pg_*.json` files and merge them all together into a single
|
|
|
|
`knapsack/report-master.json` file that is then uploaded to S3.
|
|
|
|
|
|
|
|
After that, the next pipeline will use the up-to-date `knapsack/report-master.json` file.
|
2017-10-11 01:59:34 -04:00
|
|
|
|
2019-07-08 07:07:07 -04:00
|
|
|
## Monitoring
|
2017-10-11 01:59:34 -04:00
|
|
|
|
|
|
|
The GitLab test suite is [monitored] for the `master` branch, and any branch
|
|
|
|
that includes `rspec-profile` in their name.
|
|
|
|
|
2019-02-27 17:04:18 -05:00
|
|
|
A [public dashboard] is available for everyone to see. Feel free to look at the
|
|
|
|
slowest test files and try to improve them.
|
|
|
|
|
2017-10-11 01:59:34 -04:00
|
|
|
[monitored]: ../performance.md#rspec-profiling
|
2019-02-27 17:04:18 -05:00
|
|
|
[public dashboard]: https://redash.gitlab.com/public/dashboards/l1WhHXaxrCWM5Ai9D7YDqHKehq6OU3bx5gssaiWe?org_slug=default
|
2017-10-11 01:59:34 -04:00
|
|
|
|
|
|
|
## CI setup
|
|
|
|
|
|
|
|
- Rails logging to `log/test.log` is disabled by default in CI [for
|
|
|
|
performance reasons][logging]. To override this setting, provide the
|
|
|
|
`RAILS_ENABLE_TEST_LOG` environment variable.
|
|
|
|
|
|
|
|
[logging]: https://jtway.co/speed-up-your-rails-test-suite-by-6-in-1-line-13fedb869ec4
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
[Return to Testing documentation](index.md)
|