Configuring CI Using Bitbucket Pipelines and Nx

Below is an example of a Bitbucket Pipeline setup for an Nx workspace - building and testing only what is affected.

1image: node:20 2pipelines: 3 pull-requests: 4 '**': 5 - step: 6 name: 'Build and test affected apps on Pull Requests' 7 caches: # optional 8 - node 9 script: 10 - npm ci 11 - npx nx format:check 12 - npx nx affected -t lint,test,build --base=origin/master --head=HEAD --configuration=ci 13 14 branches: 15 main: 16 - step: 17 name: "Build and test affected apps on 'main' branch changes" 18 caches: # optional 19 - node 20 script: 21 - npm ci 22 - npx nx format:check 23 - npx nx affected -t lint,test,build --base=HEAD~1 --configuration=ci 24

The pull-requests and main jobs implement the CI workflow.

Distributed Task Execution

This pipeline uses Distributed Task Execution (DTE) to automatically distribute work across multiple agent processes.

1image: node:20 2 3clone: 4 depth: full 5 6definitions: 7 steps: 8 - step: &agent 9 name: Agent 10 script: 11 - export NX_BRANCH=$BITBUCKET_PR_ID 12 13 - npm ci 14 - npx nx-cloud start-agent 15 16pipelines: 17 pull-requests: 18 '**': 19 - parallel: 20 - step: 21 name: CI 22 script: 23 - export NX_BRANCH=$BITBUCKET_PR_ID 24 25 - npm ci 26 - npx nx-cloud start-ci-run --stop-agents-after="build" --agent-count=3 27 - npx nx-cloud record -- npx nx format:check 28 - npx nx affected --target=lint,test,build 29 - npx nx-cloud stop-all-agents 30 - step: *agent 31 - step: *agent 32 - step: *agent 33