For a fully guided walkthrough of setting up and configuring continuous integration using scratch orgs and Salesforce CLI, see the Continuous Integration Using Salesforce DX Trailhead module.
This repository shows one way you can successfully use scratch orgs to create new package versions with GitLab CI/CD. We make a few assumptions in this README. Continue only if you have completed these critical configuration prerequisites.
- You know how to set up your GitLab repository with GitLab CI/CD. (Need help? See the GitLab Getting Started guide.)
- You have properly set up the JWT-based authorization flow (headless). We recommended using these steps for generating your self-signed SSL certificate.
-
Make sure that you have Salesforce CLI installed. Run
sfdx force --help
and confirm you see the command output. If you don't have it installed, you can download and install it from here. -
Mirror this repo in to your GitLab account.
-
Clone your mirrored repo locally:
git clone https://gitlab.com/<gitlab_username>/sfdx-gitlab-package.git
-
Set up a JWT-based auth flow for the target orgs that you want to deploy to. This step creates a
server.key
file that is used in subsequent steps. (https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_auth_jwt_flow.htm) -
Confirm that you can perform a JWT-based auth:
sfdx force:auth:jwt:grant --clientid <your_consumer_key> --jwtkeyfile server.key --username <your_username> --setdefaultdevhubusername
Note: For more info on setting up JWT-based auth, see Authorize an Org Using the JWT-Based Flow in the Salesforce DX Developer Guide.
-
From your JWT-based connected app on Salesforce, retrieve the generated
Consumer Key
. -
Set up GitLab CI/CD environment variables for your Salesforce
Consumer Key
andUsername
. Note that this username is the username that you use to access your Salesforce org.Create an environment variable named
SF_CONSUMER_KEY
and set it as protected.Create an environment variable named
SF_USERNAME
and set it as protected.Note: Setting the variables as protected requires that you set the branch to protected as well.
-
Encrypt the generated
server.key
file and add the encrypted file (server.key.enc
) to the folder namedassets
.openssl aes-256-cbc -salt -e -in server.key -out server.key.enc -k password
-
Set up GitLab CI/CD environment variable for the password you used to encrypt your
server.key
file.Create an environment variable named
SERVER_KEY_PASSWORD
and set it as protected. -
Copy all the contents of
package-sfdx-project.json
intosfdx-project.json
and save. -
Create the sample package.
sfdx force:package:create --path force-app/main/default/ --name "GitLab CI" --description "GitLab CI Package Example" --packagetype Unlocked
-
Create the first package version.
sfdx force:package:version:create --package "GitLab CI" --installationkeybypass --wait 10 --json --targetdevhubusername HubOrg
-
In the
.gitlab-ci.yml
file, update the value in thePACKAGENAME
variable to be Package ID in yoursfdx-project.json
file. This ID starts with0Ho
. -
Commit the updated
sfdx-project.json
and.gitlab-ci.yml
files.
Now you're ready to go! When you commit and push a change, your change kicks off a GitLab CI build.
Enjoy!
If you find any issues or opportunities for improving this repository, fix them! Feel free to contribute to this project by forking this repository and making changes to the content. Once you've made your changes, share them back with the community by sending a pull request. Please see How to send pull requests for more information about contributing to GitHub projects.
If you find any issues with this demo that you can't fix, feel free to report them in the issues section of this repository.