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 artifacts: 16 expire_in: 5 days 17 paths: 18 - dist 19 20# Creating template for a job running DTE (orchestrator) 21.base-pipeline: 22 interruptible: true 23 only: 24 - main 25 - merge_requests 26 cache: 27 key: 28 files: 29 - yarn.lock 30 paths: 31 - '.yarn-cache/' 32 before_script: 33 - yarn install --cache-folder .yarn-cache --prefer-offline --frozen-lockfile 34 - NX_HEAD=$CI_COMMIT_SHA 35 - NX_BASE=${CI_MERGE_REQUEST_DIFF_BASE_SHA:-$CI_COMMIT_BEFORE_SHA} 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