The Ant-based Force.com Migration Tool and SFDX CLI are both clients of the Metadata API. You need one or the other, but generally not both, as both tools provide Metadata API deployment services. Specifically, you don't need the Force.com Migration Tool to drive Salesforce DX. You can issue commands like sfdx force:mdapi:deploy
directly via a shell script or your build system's configuration interface.
As to package.xml
: if you're using Metadata API-format source code (typically in a src
folder) and not SFDX-format source code (typically in a force-app
folder), you'll need a package.xml
manifest.
If you're using SFDX-format code, you may not need a manifest. SFDX's force:source
commands (such as push
, for scratch orgs, and deploy
, for non-scratch orgs) don't require a manifest. Likewise, converting your SFDX-format source to MDAPI-format source via force:source:convert
will create a manifest for you to make the result deployable using the Metadata API, via the force:mdapi:deploy
command. (Note that if you're practicing the Org Development Model, without using source-tracking scratch orgs, you'll likely also have a package.xml
under the manifest
directory).
If you aren't familiar with the two source formats and aren't currently using Salesforce DX, your code is certainly in Metadata API format and does require a manifest for deployment.
Salesforce provides documentation covering CI setup on various providers, including sample repos. I wrote a series of blog posts on setting up SFDX-based CI using CircleCI some time ago.
Partial Deployments
Partial deployments are a completely separate issue from the above.
Salesforce's tooling does not include any support for partial or delta (i.e., change-only) deployments other than with source-tracking orgs (such as scratch orgs), where you can use sfdx force:source:push
.
If you're deploying to sandboxes or production, you'll have to write your own scripts to generate a package.xml
representing some arbitrary set of changes that you wish to deploy separately. There's not a single standard way to do that; it will depend on the whole scope of your tool chain and development process.
You do not have to use partial deployments to implement CI and CD. Unless your application is truly enormous, you can deploy the entire application to your persistent environments.