(configure-metadata-deployment)=
CumulusCI's deploy task uses the Metadata API to deploy metadata from the repository to a Salesforce org. deploy offers multiple sophisticated capabilities to suit the needs of your project.
Use the path option to specify the path to the metadata you wish to deploy. The metadata may be in either Metadata API or Salesforce DX source format. SFDX-format source will automatically be converted to Metadata API for deployment. This conversion takes place prior to application of transforms (below) and requires that the path be listed as a package directory in sfdx-project.json.
Set the test run level with the test_level option. Available values are NoTestRun, RunLocalTests, RunAllTestsInOrg, and RunSpecifiedTests. If you use RunSpecifiedTests, you must also supply a list of tests with the specified_tests option. This option accept a comma-separated value at the command line or a list in your cumulusci.yml markup.
deploy allows you to specify transforms that run against your metadata before it is delivered to the Salesforce platform. Some of these transforms are built-in, and others you can specify in your cumulusci.yml to suit your project's specific needs.
Four of the deploy transformations are built-in, and controlled by task options (see below). Others, including the flexible find_replace transform, are specified by your customization in cumulusci.yml.
You can specify transforms to run everywhere deploy is invoked by using customization in your tasks section:
tasks:
deploy:
options:
transforms:
- transform: find_replace
options:
patterns:
- find: foo
replace: barYou can also add a transform for just a specific flow step:
flows:
my_flow:
steps:
1:
task: deploy
options:
transforms:
- transform: find_replace
options:
patterns:
- find: foo
replace: baror override the options in an out-of-the-box flow:
flows:
deploy_packaging:
options:
deploy:
transforms:
- transform: find_replace
options:
patterns:
- find: foo
replace: barTo learn more about customization, see . To discover the available transform options, consult the section for each transform in .
The deploy task, like many others in CumulusCI, supports namespace injection. This strategy allows you to flexibly inject your package's namespace into (or remove it from) your metadata to suit various deployment contexts. See for more information about namespace injection.
In most cases, you don't need to customize deploy options for namespace injection, as the task will automatically infer the appropriate strategy. If you do find an edge case where inference does not suit your needs, you can configure namespace injection using the following options.
namespace_inject: set to specify the namespace to inject against tokens.namespace_strip: set to specify the namespace prefix to remove.unmanaged: set toTrueto replace namespace tokens with the empty string.namespaced_org: set toTrueto replace the specialNAMESPACED_ORGtokens with the namespace. Note that the packaging org is considered a namespaced-org context.
deploy can automatically remove references (<packageVersions/> elements) to the versions of other managed packages from *-meta.xml files in your metadata. This cleaning is controlled by the clean_meta_xml option, which defaults to True.
For products that are in Metadata API source format, deploy, can automatically Static Resource content that is stored uncompressed in an alternate directory into the ZIP files expected by the platform. To use this capability, set the option static_resource_path to the path where you store unzipped Static Resource content. CumulusCI will ZIP each subdirectory and place the archives in the staticresources directory in the deployment bundle. You must include required -meta.xml files in the static_resource_path.
Unlocked Packages do not support Feature Parameter metadata. When CumulusCI is building an Unlocked Package, this transform will automatically remove Feature Parameter metadata from the deployment bundle.
CumulusCI allows you to specify arbitrary injections of data against tokens you define in your metadata. This capability is often used, for example, to inject secure keys or tokens from environment variables.
Configure injection with the find_replace transform in two ways - find and xpath.
- Using the
findparameter, it modifies the metadata for each occurrence of its value by utilizing the suppliedreplaceparameter. For XML files, this adjustment exclusively affects the values within the XML elements, leaving the tags unchanged. - Using the
xpathparameter, it exclusively modifies the content of the XML files within the specific element indicated by the providedxpath, replacing it with the specifiedreplaceparameter.
Note: The Find-and-Replace Injection only supports one of the two parameters find or xpath.
Injection with find parameter:
task: deploy
options:
transforms:
- transform: find_replace
options:
patterns:
- find: foo
replace: barInjection with xpath parameter:
task: deploy
options:
transforms:
- transform: find_replace
options:
patterns:
- xpath: /path/to/element
replace: barThe xpath also supports the use of predicates such as - xpath: /path[1]/to/element[text()="some_text"]
To use an environment variable as the source of the value to replace, use the replace_env key. Note that it's valid to use multiple runs of find_replace; they will be applied in sequence.
task: deploy
options:
transforms:
- transform: find_replace
options:
patterns:
- find: AUTH_TOKEN
replace_env: SECURE_ACCESS_KEY
- xpath: /path/to/AUTH_TOKEN
replace_env: SECURE_ACCESS_KEYSome metadata components contain ID references. CumulusCI offers a way to insert the ID of an existing record from the target org directly into such components during a deployment. Specify a SOQL query with the replace_record_id_query option as follows:
Injection with find parameter:
task: deploy
options:
transforms:
- transform: find_replace
options:
patterns:
- find: special_string
replace_record_id_query: SELECT Id from Account WHERE name='Specific Account'
api: restInjection with xpath parameter:
task: deploy
options:
transforms:
- transform: find_replace
options:
patterns:
- xpath: /path/to/element
replace_record_id_query: SELECT Id from Account WHERE name='Specific Account'
api: restAvailable values for api include rest and tooling.
CumulusCI can replace a given token with the username of the current running user in the target Salesforce org.
All that is needed is to specify a value for find or xpath and set inject_username: True:
Injection with find parameter:
task: deploy
options:
transforms:
- transform: find_replace
options:
patterns:
- find: special_string
inject_username: TrueInjection with xpath parameter:
task: deploy
options:
transforms:
- transform: find_replace
options:
patterns:
- xpath: /path/to/element
inject_username: TrueCumulusCI can replace a given token with the org URL of the target Salesforce org.
All that is needed is to specify a value for find or xpath and set inject_org_url: True:
Injection with find parameter:
task: deploy
options:
transforms:
- transform: find_replace
options:
patterns:
- find: special_string
inject_org_url: TrueInjection with xpath parameter:
task: deploy
options:
transforms:
- transform: find_replace
options:
patterns:
- xpath: /path/to/element
inject_org_url: TrueThis transformation allows you to deploy a subset of a metadata directory based on a package.xml manifest by removing unwanted components. It will compare components available in the source folder with a provided package.xml file and delete/modify component files which are not found.
task: deploy
options:
transforms:
- transform: strip_unwanted_components
options:
package_xml: PACKAGE_XML_FILE_PATH