Learn how to setup set up CICD delta deployment with Salesforce DX. Tips and tricks for authorisation , setting up node and the basic git commands.
I’m revamping our CICD process with Salesforce DX and Bitbucket Pipeline with the following initial setup which will only a delta deployment
Authentication method – authorize an org and grab the sfdxurl to be stored as repository variable in Bitbucket
sfdx force:auth:web:login
sfdx force:org:display --verbose
There would be two token types
force://<refreshToken>@<instanceUrl>
or
force://<clientId>:<clientSecret>:<refreshToken>@<instanceUrl>
Copy the SFDX Auth URL which will be the second type. Create a repository variable AUTH_URL in Bitbucket and store the copied value.
Echo the AUTH_URL to a file then authenticate with with sfdxurl:store
echo $AUTH_URL >> /tmp/sfdx_auth.txt
sfdx force:auth:sfdxurl:store -f /tmp/sfdx_auth.txt -s -a dxpipeline
Grab the latest sfdx tool and install.
wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz
mkdir sfdx-cli
tar xJf sfdx-linux-amd64.tar.xz -C sfdx-cli --strip-components 1
./sfdx-cli/install
Next, to compare delta files – there is node tool available in github that does delta comparison between hash commit or branch. Install the sfdx-git-delta app
npm install sfdx-git-delta@latest -g
Finally I incorporated these to my git workflow
On a Pull Request – I want to run a delta comparison and do an empty check only that my delta files changes are deployable and does break any unit tests.
First checkout a temporary branch from the feature branch
git checkout -b some-pr-branch
Next, run the tool to create a delta comparison from that branch to the target branch.
sgd --to some-pr-branch --from origin/staging --repo . --output .
The tool should create a package.xml/destructiveChange.xml file based on the diff on their respective directory.
Next convert the source format to mdapi so we can run a transactional deploy.
sfdx force:source:convert --manifest=package/package.xml --outputdir=convert
After conversion, do an empty check deploy and run the unit test
sfdx force:mdapi:deploy --deploydir=convert -c -l RunLocalTests -w 30
Below is the complete Pull Request script.
image: atlassian/default-image:2
pipelines:
pull-requests:
'feature/*': # Pull request from feature branch to Staging
- step:
name: "Staging Pull Request Validate Package"
script:
- echo "QA Pull Request Validation"
- wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz
- mkdir sfdx-cli
- tar xJf sfdx-linux-amd64.tar.xz -C sfdx-cli --strip-components 1
- ./sfdx-cli/install
- echo $AUTH_URL >> /tmp/sfdx_auth.txt
- sfdx force:auth:sfdxurl:store -f /tmp/sfdx_auth.txt -s -a dxpipeline
- npm install sfdx-git-delta@latest -g
- git checkout -b some-pr-branch
- git --no-pager diff --name-status some-pr-branch origin/staging
- sgd --to some-pr-branch --from origin/staging --repo . --output .
- echo "--- package.xml generated with added and modified metadata ---"
- cat package/package.xml
- sfdx force:source:convert --manifest=package/package.xml --outputdir=convert
- echo "---- Validating delta package ----"
- sfdx force:mdapi:deploy --deploydir=convert -c -l RunLocalTests -w 30
On Push to the branch – I ran similar steps with the only exception that I compare the current branch to the staging branch and not do an empty check or run the test classes as I already ran them.
Below is the complete Push script.
image: atlassian/default-image:2
pipelines:
pushs:
staging:
- step:
name: "Deploy to Staging"
script:
- echo "Deploy to Staging"
- wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz
- mkdir sfdx-cli
- tar xJf sfdx-linux-amd64.tar.xz -C sfdx-cli --strip-components 1
- ./sfdx-cli/install
- echo $AUTH_URL >> /tmp/sfdx_auth.txt
- sfdx force:auth:sfdxurl:store -f /tmp/sfdx_auth.txt -s -a dxpipeline
- npm install sfdx-git-delta@latest -g
- git checkout -b dev
- git --no-pager diff --name-status some-pr-branch origin/staging
- sgd --to dev --from origin/staging --repo . --output .
- echo "--- package.xml generated with added and modified metadata ---"
- cat package/package.xml
- sfdx force:source:convert --manifest=package/package.xml --outputdir=convert
- echo "---- Validating delta package ----"
- sfdx force:mdapi:deploy --deploydir=convert -w 30
Hope you find this useful. Hit me up on the comments below for any questions.
Hi,
I am trying to implement this, but not able achieve the end outcome. can you please help me.
Hi Anant,
I have created youtube series where I showed how I configured Github Actions with SFDX delta deploy. Check it out https://www.youtube.com/watch?v=zxy5jeYx5sg&list=PLSjzuyuoSi-EfqRq-PJ_KKzLzB84YModG