Salto for
Salesforce
Articles
SHARE
Knuckles
August 20, 2024
6
min read
When implementing a CI/CD pipeline using SFDX, it’s critical that the SFDX default username is set correctly to ensure that all commands are directed to the right Salesforce environment. By ensuring that the default username is set correctly, you also ensure that your CI/CD pipeline operates smoothly, consistently, and accurately.
In this guide, we’ll discuss exactly why the SFDX default username is so important in setting up and maintaining a CI/CD pipeline for Salesforce projects. We’ll cover what the SFDX default username is and how it functions, look at the complications of changing default usernames, and set out some best practices for using the SFDX default username in your CI/CD pipelines.
The SFDX default username is essentially the org that your SFDX project is “connected” to (more on this later). Any Salesforce CLI commands that you run will run against that org unless you specify differently.
Let’s see it in action.
Here on our terminal, we’ll open Visual Studio code and create a new SFDX project. We’ll choose the default template and call it, “Who am I?” Right now, it’s not connected to any Salesforce org; in fact, you may get an error saying that the extension couldn’t be run because the project is not connected to an org.
That is the first point to understand: when you have a project like this, it is—by default—not connected to an org. It doesn't know anything about your sandboxes, scratch orgs, dev orgs, etc. For example, if we open any of the folders, they’ll be basically empty despite the fact that we have a basic structure.
There are a few different ways you can change the default username, such as through Visual Studio Code or through the terminal. We’ll change it through Visual Studio Code now.
Let’s click on “No Default Org Set” at the bottom left corner of the screen. This will give us the option to authorize a new org, which will then allow us to log into a Salesforce org and automatically set it as the default. We can also see here any other orgs we’ve connected to in the past. For our purposes, we’ll search for and click on “ci-cd-dev”, after which we’ll see in that bottom left corner that the project is now connected to that org.
Let’s now click on “package.xml” followed by “Retrieve Source in Manifest From Org”, which will execute an SFDX retrieve call to retrieve the metadata in this org. Once the command has run successfully, we’ll see one apex class, which is the only apex class that exists in that org.
Now, let’s try changing the default username to “ci-cd-prod” in the same way we set it to “ci-cd-dev”. Clicking once more on “package.xml” and selecting “Retrieve Source From Org”, we’ll see that we’ve retrieved all the apex classes from this production org. However, if we search for “sampleclass”, we find that the class from that previous org is still here—even though it doesn’t actually exist in this production org. Things are starting to get a little weird.
Let’s try selecting yet another org, right clicking on “package.xml”, and selecting “Retrieve Source From Org” again. Not only will we see the metadata of three completely separate Salesforce orgs in one SFDX project, but we also have no way of knowing which class or which metadata item came from which org. If we try to deploy this now, it will fail because it has different apex classes from a different org and that class likely has dependencies that don’t exist in this org. Essentially, we’ve got a mess on our hands.
What we learn from this is: the connection between an SFDX project and a Salesforce org is merely artificial. What you’re working with is a default username that essentially tells the Salesforce CLI to run any command against that org, but there is no validation on whether that project had metadata from a different Salesforce org. It will simply retrieve the metadata from the default username.
As you can see, if you use this the wrong way, it could wreak havoc on your entire git repository, break your CI/CD pipeline, and complicate your git history as you’ll have metadata from a completely different org. This goes to show how crucial it is to understand that this connection between an SFDX project and a Salesforce org is artificial. There is no validation.
This ability to change the default org is what enables CI/CD. For example, we have our metadata in a git repository and, on the CI server, we can deploy that same metadata to two different Salesforce orgs by changing the default username so that it points to one sandbox and then another (and then eventually to production).
It’s also possible to change the default username through the Salesforce CLI. For example, if you type “SFDX configuration set”, and then “default username” and write, “Salto CICD prod”, the default username will be changed to that org.
Looking at the official documentation on this feature, you’ll see some examples of how you can log in to an org through SFDX and automatically set it as the default username, which is what we normally do when we create a brand new SFDX project. There are also some commands, such as the source push, that let you override the default username so that it points to another org. This is very common in CI/CD. Feel free to explore the documentation if you’d like to know more about this feature.
For the purposes of CI/CD, there are three main points to remember:
The SFDX default username plays a critical role in managing CI/CD pipelines for Salesforce projects. A solid understanding of how the default username functions will help you maintain consistent org connections, prevent errors, and facilitate seamless metadata deployment across different environments.
Salto for
Salesforce
Salesforce
SHARE
Knuckles
August 20, 2024
6
min read
When implementing a CI/CD pipeline using SFDX, it’s critical that the SFDX default username is set correctly to ensure that all commands are directed to the right Salesforce environment. By ensuring that the default username is set correctly, you also ensure that your CI/CD pipeline operates smoothly, consistently, and accurately.
In this guide, we’ll discuss exactly why the SFDX default username is so important in setting up and maintaining a CI/CD pipeline for Salesforce projects. We’ll cover what the SFDX default username is and how it functions, look at the complications of changing default usernames, and set out some best practices for using the SFDX default username in your CI/CD pipelines.
The SFDX default username is essentially the org that your SFDX project is “connected” to (more on this later). Any Salesforce CLI commands that you run will run against that org unless you specify differently.
Let’s see it in action.
Here on our terminal, we’ll open Visual Studio code and create a new SFDX project. We’ll choose the default template and call it, “Who am I?” Right now, it’s not connected to any Salesforce org; in fact, you may get an error saying that the extension couldn’t be run because the project is not connected to an org.
That is the first point to understand: when you have a project like this, it is—by default—not connected to an org. It doesn't know anything about your sandboxes, scratch orgs, dev orgs, etc. For example, if we open any of the folders, they’ll be basically empty despite the fact that we have a basic structure.
There are a few different ways you can change the default username, such as through Visual Studio Code or through the terminal. We’ll change it through Visual Studio Code now.
Let’s click on “No Default Org Set” at the bottom left corner of the screen. This will give us the option to authorize a new org, which will then allow us to log into a Salesforce org and automatically set it as the default. We can also see here any other orgs we’ve connected to in the past. For our purposes, we’ll search for and click on “ci-cd-dev”, after which we’ll see in that bottom left corner that the project is now connected to that org.
Let’s now click on “package.xml” followed by “Retrieve Source in Manifest From Org”, which will execute an SFDX retrieve call to retrieve the metadata in this org. Once the command has run successfully, we’ll see one apex class, which is the only apex class that exists in that org.
Now, let’s try changing the default username to “ci-cd-prod” in the same way we set it to “ci-cd-dev”. Clicking once more on “package.xml” and selecting “Retrieve Source From Org”, we’ll see that we’ve retrieved all the apex classes from this production org. However, if we search for “sampleclass”, we find that the class from that previous org is still here—even though it doesn’t actually exist in this production org. Things are starting to get a little weird.
Let’s try selecting yet another org, right clicking on “package.xml”, and selecting “Retrieve Source From Org” again. Not only will we see the metadata of three completely separate Salesforce orgs in one SFDX project, but we also have no way of knowing which class or which metadata item came from which org. If we try to deploy this now, it will fail because it has different apex classes from a different org and that class likely has dependencies that don’t exist in this org. Essentially, we’ve got a mess on our hands.
What we learn from this is: the connection between an SFDX project and a Salesforce org is merely artificial. What you’re working with is a default username that essentially tells the Salesforce CLI to run any command against that org, but there is no validation on whether that project had metadata from a different Salesforce org. It will simply retrieve the metadata from the default username.
As you can see, if you use this the wrong way, it could wreak havoc on your entire git repository, break your CI/CD pipeline, and complicate your git history as you’ll have metadata from a completely different org. This goes to show how crucial it is to understand that this connection between an SFDX project and a Salesforce org is artificial. There is no validation.
This ability to change the default org is what enables CI/CD. For example, we have our metadata in a git repository and, on the CI server, we can deploy that same metadata to two different Salesforce orgs by changing the default username so that it points to one sandbox and then another (and then eventually to production).
It’s also possible to change the default username through the Salesforce CLI. For example, if you type “SFDX configuration set”, and then “default username” and write, “Salto CICD prod”, the default username will be changed to that org.
Looking at the official documentation on this feature, you’ll see some examples of how you can log in to an org through SFDX and automatically set it as the default username, which is what we normally do when we create a brand new SFDX project. There are also some commands, such as the source push, that let you override the default username so that it points to another org. This is very common in CI/CD. Feel free to explore the documentation if you’d like to know more about this feature.
For the purposes of CI/CD, there are three main points to remember:
The SFDX default username plays a critical role in managing CI/CD pipelines for Salesforce projects. A solid understanding of how the default username functions will help you maintain consistent org connections, prevent errors, and facilitate seamless metadata deployment across different environments.