summaryrefslogtreecommitdiff
path: root/doc/development/testing_guide/ci.md
blob: d685cacf9ea9ea5ec30b9435cabb4a01c17d99e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# GitLab tests in the Continuous Integration (CI) context

### Test suite parallelization on the CI

Our current CI parallelization setup is as follows:

1. The `knapsack` job in the prepare stage that is supposed to ensure we have a
   `knapsack/${CI_PROJECT_NAME}/rspec_report-master.json` file:
   - The `knapsack/${CI_PROJECT_NAME}/rspec_report-master.json` file is fetched
     from S3, if it's not here we initialize the file with `{}`.
1. Each `rspec x y` 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/${CI_PROJECT_NAME}/rspec_report-master.json` since the "artifacts
     from all previous stages are passed by default".
   - the jobs set their own report path to
     `KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${JOB_NAME[0]}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json`.
   - if knapsack is doing its job, test files that are run should be listed under
     `Report specs`, not under `Leftover specs`.
1. The `update-knapsack` job takes all the
   `knapsack/${CI_PROJECT_NAME}/${JOB_NAME[0]}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json`
   files from the `rspec x y` jobs and merge them all together into a single
   `knapsack/${CI_PROJECT_NAME}/rspec_report-master.json` file that is then
   uploaded to S3.

After that, the next pipeline will use the up-to-date
`knapsack/${CI_PROJECT_NAME}/rspec_report-master.json` file. 

### Monitoring

The GitLab test suite is [monitored] for the `master` branch, and any branch
that includes `rspec-profile` in their name.

[monitored]: ../performance.md#rspec-profiling

## CI setup

- On CE and EE, the test suite runs both PostgreSQL and MySQL.
- 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)