Configuring CI Using GitLab and Nx
Below is an example of a GitLab pipeline setup for an Nx workspace - building and testing only what is affected.
1image: node:18
2
3stages:
4 - test
5 - build
6
7.distributed:
8 interruptible: true
9 only:
10 - main
11 - merge_requests
12 cache:
13 key:
14 files:
15 - package-lock.json
16 paths:
17 - .npm/
18 before_script:
19 - npm ci --cache .npm --prefer-offline
20 - NX_HEAD=$CI_COMMIT_SHA
21 - NX_BASE=${CI_MERGE_REQUEST_DIFF_BASE_SHA:-$CI_COMMIT_BEFORE_SHA}
22
23variables:
24 GIT_DEPTH: 0
25
26format-check:
27 stage: test
28 extends: .distributed
29 script:
30 - npx nx format:check --base=$NX_BASE --head=$NX_HEAD
31
32lint:
33 stage: test
34 extends: .distributed
35 script:
36 - npx nx affected --base=$NX_BASE --head=$NX_HEAD -t lint --parallel=3
37
38test:
39 stage: test
40 extends: .distributed
41 script:
42 - npx nx affected --base=$NX_BASE --head=$NX_HEAD -t test --parallel=3 --configuration=ci
43
44build:
45 stage: build
46 extends: .distributed
47 script:
48 - npx nx affected --base=$NX_BASE --head=$NX_HEAD -t build --parallel=3
49
The build
and test
jobs implement the CI workflow using .distributed
as a template to keep the CI configuration file more readable.
Distributed CI with Nx Cloud
Read more about Distributed Task Execution (DTE).
1image: node:18
2
3# Creating template for DTE agents
4.dte-agent:
5 interruptible: true
6 cache:
7 key:
8 files:
9 - yarn.lock
10 paths:
11 - '.yarn-cache/'
12 script:
13 - yarn install --cache-folder .yarn-cache --prefer-offline --frozen-lockfile
14 - yarn nx-cloud start-agent
15
16# Creating template for a job running DTE (orchestrator)
17.base-pipeline:
18 interruptible: true
19 only:
20 - main
21 - merge_requests
22 cache:
23 key:
24 files:
25 - yarn.lock
26 paths:
27 - '.yarn-cache/'
28 before_script:
29 - yarn install --cache-folder .yarn-cache --prefer-offline --frozen-lockfile
30 - NX_HEAD=$CI_COMMIT_SHA
31 - NX_BASE=${CI_MERGE_REQUEST_DIFF_BASE_SHA:-$CI_COMMIT_BEFORE_SHA}
32 artifacts:
33 expire_in: 5 days
34 paths:
35 - dist
36
37# Main job running DTE
38nx-dte:
39 stage: affected
40 extends: .base-pipeline
41 script:
42 - yarn nx-cloud start-ci-run --stop-agents-after="build"
43 - yarn nx-cloud record -- yarn nx format:check --base=$NX_BASE --head=$NX_HEAD
44 - yarn nx affected --base=$NX_BASE --head=$NX_HEAD -t lint --parallel=3 & yarn nx affected --base=$NX_BASE --head=$NX_HEAD -t test --parallel=3 --configuration=ci & yarn nx affected --base=$NX_BASE --head=$NX_HEAD -t e2e --parallel=3 & yarn nx affected --base=$NX_BASE --head=$NX_HEAD -t build --parallel=3
45
46# Create as many agents as you want
47nx-dte-agent1:
48 extends: .dte-agent
49 stage: affected
50nx-dte-agent2:
51 extends: .dte-agent
52 stage: affected
53nx-dte-agent3:
54 extends: .dte-agent
55 stage: affected
56