- Overview
- UiPath CLI
- About UiPath CLI
- Downloading UiPath CLI
- Compatibility matrix
- Running UiPath CLI
- Managing NuGet feeds
- Trusting custom certificates
- Test Manager Support
- Packing projects into a package
- Signing project packages
- Analyzing a project
- Deploying a package to Orchestrator
- Running a job inside Orchestrator
- Testing a package or running a test set
- Testing multiple packages
- Input parameters JSON format
- Deploying assets to Orchestrator
- Deleting assets from Orchestrator
- Running tasks using JSON configuration
- Restoring automation dependencies
- Troubleshooting UiPath CLI
- Azure DevOps extension
- Jenkins plugin
Deploy a solution package to a target folder and activate it in Orchestrator.
After uploading a solution package to Solutions, you can deploy it to a target folder and activate it to make it operational.
For Orchestrator instances signed by a private Certificate Authority (such as UiPath Automation Suite), both deploy and deploy-activate also accept --ca-cert and --pinnedpubkey parameters. See Trusting custom certificates for scenarios and examples.
Deployment workflow
Deploying a solution is a two-step process:
- Deploy: Create a deployment configuration and associate the package with a target folder.
- Activate: Make the deployment live and operational.
This separation allows you to prepare deployments in advance and activate them during maintenance windows or after manual approval.
Deploying a solution
The deploy command creates a deployment of a solution package in a specific environment.
Command syntax
uipcli solution deploy <package-name> [options]
uipcli solution deploy <package-name> [options]
Parameters
| Parameter | Description | Required |
|---|---|---|
<package-name> | Name of the uploaded package | Yes |
-v or --version | Package version to deploy | Yes |
-d or --deploymentName | Name for this deployment | Yes |
-f or --deploymentFolderName | Target folder name in Orchestrator | Yes |
-U | Orchestrator URL | Yes |
-T | Tenant name | Yes |
-A | Organization name | Yes |
-I | External App ID | Yes |
-S | External App secret | Yes |
--applicationScope | Optional scopes (defaults applied) | No |
--deploymentParentFolder | The Orchestrator folder where the deployment folder will be created. If not specified, the deployment folder will be created in tenant folder. When specified, deployment will be under respective folder. When set to "[email protected]'s workspace", the deployment will be under personal workspace for specified user. | No |
--configPath | Local path to solution configuration file; needed in scenarios with overwriting bindings. See Downloading Solution Packages and Configs for details on obtaining configuration files. | No |
--traceLevel | Logging level | No |
--ca-cert | Trusted root CA file(s) (PEM, DER, or PKCS#7) for the Orchestrator/Identity TLS certificate. Repeat or comma-separate. See Trusting custom certificates. | No |
--pinnedpubkey | Pin the leaf public key (sha256//<base64>). See Trusting custom certificates. | No |
Default Application Scopes for Solutions
When using external application authentication without specifying the --applicationScope parameter, the CLI automatically applies these default Solution scopes:
Solutions.Packages Solutions.Deployments OR.Execution
Important: All three scopes are required for all Solution-related CLI commands. These scopes are grouped together to provide comprehensive coverage for all available Solution commands and must be configured collectively rather than individually per command.
If a deployment with the same name already exists at any level within the tenant in Orchestrator, this operation upgrades the existing deployment instead of creating a new one. If the existing deployment is in Failed state, the upgrade does not proceed; resolve or uninstall the failed deployment before retrying.
Solutions deployed at the tenant level do not automatically assign a user to the resulting folder. To assign an account, ensure the appropriate configuration is set in Orchestrator (Tenant > Folders).
Authentication
See Authentication and scopes for required scopes and External App setup.
Example
uipcli solution deploy MySolution \
-v 1.2.3 \
-d MySolution-Prod-v1.2.3 \
-f Production \
-U https://cloud.uipath.com/ \
-T DefaultTenant \
-A myorg \
-I 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
-S **** \
--applicationScope "AutomationSolutions Solutions.Deployments Solutions.Deployments.Read Solutions.Deployments.Write Solutions.Packages Solutions.Packages.Read Solutions.Packages.Write" \
--traceLevel Information
uipcli solution deploy MySolution \
-v 1.2.3 \
-d MySolution-Prod-v1.2.3 \
-f Production \
-U https://cloud.uipath.com/ \
-T DefaultTenant \
-A myorg \
-I 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
-S **** \
--applicationScope "AutomationSolutions Solutions.Deployments Solutions.Deployments.Read Solutions.Deployments.Write Solutions.Packages Solutions.Packages.Read Solutions.Packages.Write" \
--traceLevel Information
Deployment naming conventions
Choose meaningful deployment names that include:
- Solution name
- Environment identifier
- Version or date
Examples
MySolution-Dev-v1.2.3
MySolution-Test-2025-01-15
MySolution-Prod-Release-1.2.3
InvoiceProcessing-Production-v2.0.0
MySolution-Dev-v1.2.3
MySolution-Test-2025-01-15
MySolution-Prod-Release-1.2.3
InvoiceProcessing-Production-v2.0.0
This makes it easier to track and manage deployments across environments.
What happens during deployment
When you run the deploy command:
- The package is validated in Solutions.
- A deployment configuration is created.
- The deployment is associated with the target folder.
- Environment-specific bindings are initialized.
- The deployment is prepared but not yet active.
The Solution does not start executing processes until you activate it.
Reusing existing resources
By default, deploying a Solution provisions every resource in the target folder. When the target environment already contains a resource you want to reuse, such as a shared connection to an external system, link the Solution's resource to the existing one through the deployment configuration file, then deploy with --configPath.
This is the pipeline equivalent of choosing Customize and linking a resource by hand when you deploy a Solution manually in Orchestrator.
Linking a resource that lives in an Orchestrator folder requires the OR.Folders and RCS.FolderAuthorization scopes, and the External Application must be assigned to the folder that holds the existing resource.
Steps
-
Download the deployment configuration for the package. See Downloading Solution Packages and Configs.
uipcli solution download-config MySolution \ -d C:\Configs \ -v 1.0.0 \ --format json \ -U https://cloud.uipath.com/ \ -T DefaultTenant \ -A myorg \ -I 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx \ -S **** \ --applicationScope "AutomationSolutions Solutions.Deployments Solutions.Packages OR.Folders RCS.FolderAuthorization"uipcli solution download-config MySolution \ -d C:\Configs \ -v 1.0.0 \ --format json \ -U https://cloud.uipath.com/ \ -T DefaultTenant \ -A myorg \ -I 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx \ -S **** \ --applicationScope "AutomationSolutions Solutions.Deployments Solutions.Packages OR.Folders RCS.FolderAuthorization" -
Open the downloaded configuration file.
-
Locate the entry for the resource you want to reuse.
-
Add a
linkToResourceblock that points the entry at the existing Orchestrator resource by name and folder. For a connection resource, the entry looks like this:{ "kind": "connection", "name": "Slack connection", "resourceKey": "b060048b-4be3-425e-9822-9139605ba2a7", "folderPaths": [ "solution_folder" ], "configuration": { "description": null, "authenticationType": "AuthenticateAfterDeployment", "connectorVersion": "2.14.7", "connectorKey": "uipath-salesforce-slack", "pollingInterval": 5 }, "linkToResource": { "name": "Existing Slack connection", "folderPath": "Shared" } }{ "kind": "connection", "name": "Slack connection", "resourceKey": "b060048b-4be3-425e-9822-9139605ba2a7", "folderPaths": [ "solution_folder" ], "configuration": { "description": null, "authenticationType": "AuthenticateAfterDeployment", "connectorVersion": "2.14.7", "connectorKey": "uipath-salesforce-slack", "pollingInterval": 5 }, "linkToResource": { "name": "Existing Slack connection", "folderPath": "Shared" } }The
linkToResourceobject points the Solution's resource at the existing one; the fields underconfigurationvary by resource type. -
Deploy the Solution, passing the edited configuration with
--configPath.uipcli solution deploy MySolution \ -v 1.0.0 \ -d MySolution-Prod-v1.0.0 \ -f Production \ --deploymentParentFolder "Shared" \ --configPath C:\Configs\MySolution.1.0.0.json \ -U https://cloud.uipath.com/ \ -T DefaultTenant \ -A myorg \ -I 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx \ -S **** \ --applicationScope "AutomationSolutions Solutions.Deployments Solutions.Packages OR.Folders RCS.FolderAuthorization"uipcli solution deploy MySolution \ -v 1.0.0 \ -d MySolution-Prod-v1.0.0 \ -f Production \ --deploymentParentFolder "Shared" \ --configPath C:\Configs\MySolution.1.0.0.json \ -U https://cloud.uipath.com/ \ -T DefaultTenant \ -A myorg \ -I 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx \ -S **** \ --applicationScope "AutomationSolutions Solutions.Deployments Solutions.Packages OR.Folders RCS.FolderAuthorization"
The deployment reuses the linked resource instead of creating a new one in the target folder.
Connection authentication
For connection resources, linking an existing connection is one option among several. The authenticationType field in the configuration file accepts two values: ConfigurableByUsers and AuthenticateAfterDeployment.
Set authenticationType to ConfigurableByUsers to leave the connection unbound and defer its selection to execution time. Users select and authenticate the connection when the automation runs, which is also a valid configuration for activation.
With AuthenticateAfterDeployment, the connection must be authenticated after the deployment completes. If it is not authenticated by the time activation runs, the activation is reported as failed.
Activating a deployment
The deploy-activate command makes a deployment live and operational.
Command syntax
uipcli solution deploy-activate <deployment-name> [options]
uipcli solution deploy-activate <deployment-name> [options]
Parameters
| Parameter | Description | Required |
|---|---|---|
<deployment-name> | Name of the deployment to activate | Yes |
-U | Orchestrator URL | Yes |
-T | Tenant name | Yes |
-A | Organization name | Yes |
-I | External App ID | Yes |
-S | External App secret | Yes |
--applicationScope | Required scopes | Yes |
--traceLevel | Logging level | No |
--ca-cert | Trusted root CA file(s) (PEM, DER, or PKCS#7) for the Orchestrator/Identity TLS certificate. Repeat or comma-separate. See Trusting custom certificates. | No |
--pinnedpubkey | Pin the leaf public key (sha256//<base64>). See Trusting custom certificates. | No |
Authentication
See Authentication and scopes for required scopes and External App setup.
Example
uipcli solution deploy-activate MySolution-Prod-v1.2.3 \
-U https://cloud.uipath.com/ \
-T DefaultTenant \
-A myorg \
-I 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
-S **** \
--applicationScope "AutomationSolutions Solutions.Deployments Solutions.Deployments.Read Solutions.Deployments.Write Solutions.Packages Solutions.Packages.Read Solutions.Packages.Write" \
--traceLevel Information
uipcli solution deploy-activate MySolution-Prod-v1.2.3 \
-U https://cloud.uipath.com/ \
-T DefaultTenant \
-A myorg \
-I 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
-S **** \
--applicationScope "AutomationSolutions Solutions.Deployments Solutions.Deployments.Read Solutions.Deployments.Write Solutions.Packages Solutions.Packages.Read Solutions.Packages.Write" \
--traceLevel Information
What happens during activation
When you activate a deployment:
- The deployment becomes the active version in the target folder.
- Triggers are activated.
- Any previously active deployment in the same folder is deactivated.
CI/CD pipeline integration
Complete deployment workflow
steps:
# 1. Pack the Solution
- name: Pack Solution
run: |
uipcli solution pack ./MySolution \
--output ./packages \
--version "1.0.${{ github.run_number }}"
# 2. Upload to Solutions Management
- name: Upload Package
run: |
uipcli solution upload-package ./packages/MySolution.1.0.${{ github.run_number }}.zip \
-U ${{ secrets.ORCHESTRATOR_URL }} \
-T ${{ secrets.ORCHESTRATOR_TENANT }} \
-A ${{ secrets.ORG_NAME }} \
-I ${{ secrets.EXTERNAL_APP_ID }} \
-S ${{ secrets.EXTERNAL_APP_SECRET }} \
--applicationScope "AutomationSolutions Solutions.Packages Solutions.Packages.Write"
# 3. Deploy to target environment
- name: Deploy Solution
run: |
uipcli solution deploy MySolution \
-v "1.0.${{ github.run_number }}" \
-d "MySolution-Prod-v1.0.${{ github.run_number }}" \
-f Production \
-U ${{ secrets.ORCHESTRATOR_URL }} \
-T ${{ secrets.ORCHESTRATOR_TENANT }} \
-A ${{ secrets.ORG_NAME }} \
-I ${{ secrets.EXTERNAL_APP_ID }} \
-S ${{ secrets.EXTERNAL_APP_SECRET }} \
--applicationScope "AutomationSolutions Solutions.Deployments Solutions.Deployments.Read Solutions.Deployments.Write Solutions.Packages Solutions.Packages.Read Solutions.Packages.Write"
# 4. Activate the deployment
- name: Activate Deployment
run: |
uipcli solution deploy-activate "MySolution-Prod-v1.0.${{ github.run_number }}" \
-U ${{ secrets.ORCHESTRATOR_URL }} \
-T ${{ secrets.ORCHESTRATOR_TENANT }} \
-A ${{ secrets.ORG_NAME }} \
-I ${{ secrets.EXTERNAL_APP_ID }} \
-S ${{ secrets.EXTERNAL_APP_SECRET }} \
--applicationScope "AutomationSolutions Solutions.Deployments Solutions.Deployments.Read Solutions.Deployments.Write Solutions.Packages Solutions.Packages.Read Solutions.Packages.Write"
steps:
# 1. Pack the Solution
- name: Pack Solution
run: |
uipcli solution pack ./MySolution \
--output ./packages \
--version "1.0.${{ github.run_number }}"
# 2. Upload to Solutions Management
- name: Upload Package
run: |
uipcli solution upload-package ./packages/MySolution.1.0.${{ github.run_number }}.zip \
-U ${{ secrets.ORCHESTRATOR_URL }} \
-T ${{ secrets.ORCHESTRATOR_TENANT }} \
-A ${{ secrets.ORG_NAME }} \
-I ${{ secrets.EXTERNAL_APP_ID }} \
-S ${{ secrets.EXTERNAL_APP_SECRET }} \
--applicationScope "AutomationSolutions Solutions.Packages Solutions.Packages.Write"
# 3. Deploy to target environment
- name: Deploy Solution
run: |
uipcli solution deploy MySolution \
-v "1.0.${{ github.run_number }}" \
-d "MySolution-Prod-v1.0.${{ github.run_number }}" \
-f Production \
-U ${{ secrets.ORCHESTRATOR_URL }} \
-T ${{ secrets.ORCHESTRATOR_TENANT }} \
-A ${{ secrets.ORG_NAME }} \
-I ${{ secrets.EXTERNAL_APP_ID }} \
-S ${{ secrets.EXTERNAL_APP_SECRET }} \
--applicationScope "AutomationSolutions Solutions.Deployments Solutions.Deployments.Read Solutions.Deployments.Write Solutions.Packages Solutions.Packages.Read Solutions.Packages.Write"
# 4. Activate the deployment
- name: Activate Deployment
run: |
uipcli solution deploy-activate "MySolution-Prod-v1.0.${{ github.run_number }}" \
-U ${{ secrets.ORCHESTRATOR_URL }} \
-T ${{ secrets.ORCHESTRATOR_TENANT }} \
-A ${{ secrets.ORG_NAME }} \
-I ${{ secrets.EXTERNAL_APP_ID }} \
-S ${{ secrets.EXTERNAL_APP_SECRET }} \
--applicationScope "AutomationSolutions Solutions.Deployments Solutions.Deployments.Read Solutions.Deployments.Write Solutions.Packages Solutions.Packages.Read Solutions.Packages.Write"
Gated deployments with manual approval
You can separate deploy and activate steps to implement approval workflows:
# Stage 1: Deploy (automated)
- stage: DeployToProduction
jobs:
- job: Deploy
steps:
- script: |
uipcli solution deploy MySolution -v $(version) -d MySolution-Prod-$(version) -f Production ...
displayName: 'Prepare Production Deployment'
# Stage 2: Activate (requires approval)
- stage: ActivateProduction
dependsOn: DeployToProduction
# Manual approval gate configured in Azure DevOps
jobs:
- deployment: Activate
environment: 'Production'
steps:
- script: |
uipcli solution deploy-activate MySolution-Prod-$(version) ...
displayName: 'Activate Production Deployment'
# Stage 1: Deploy (automated)
- stage: DeployToProduction
jobs:
- job: Deploy
steps:
- script: |
uipcli solution deploy MySolution -v $(version) -d MySolution-Prod-$(version) -f Production ...
displayName: 'Prepare Production Deployment'
# Stage 2: Activate (requires approval)
- stage: ActivateProduction
dependsOn: DeployToProduction
# Manual approval gate configured in Azure DevOps
jobs:
- deployment: Activate
environment: 'Production'
steps:
- script: |
uipcli solution deploy-activate MySolution-Prod-$(version) ...
displayName: 'Activate Production Deployment'
Multi-environment promotion
Deploy the same version to multiple environments sequentially:
# Deploy to Dev
uipcli solution deploy MySolution -v 1.2.3 -d MySolution-Dev-1.2.3 -f Dev ...
uipcli solution deploy-activate MySolution-Dev-1.2.3 ...
# Deploy to Test
uipcli solution deploy MySolution -v 1.2.3 -d MySolution-Test-1.2.3 -f Test ...
uipcli solution deploy-activate MySolution-Test-1.2.3 ...
# Deploy to Production (after approval)
uipcli solution deploy MySolution -v 1.2.3 -d MySolution-Prod-1.2.3 -f Production ...
uipcli solution deploy-activate MySolution-Prod-1.2.3 ...
# Deploy to Dev
uipcli solution deploy MySolution -v 1.2.3 -d MySolution-Dev-1.2.3 -f Dev ...
uipcli solution deploy-activate MySolution-Dev-1.2.3 ...
# Deploy to Test
uipcli solution deploy MySolution -v 1.2.3 -d MySolution-Test-1.2.3 -f Test ...
uipcli solution deploy-activate MySolution-Test-1.2.3 ...
# Deploy to Production (after approval)
uipcli solution deploy MySolution -v 1.2.3 -d MySolution-Prod-1.2.3 -f Production ...
uipcli solution deploy-activate MySolution-Prod-1.2.3 ...
Rollback strategy
To roll back to a previous version:
- Deploy the previous version with a new deployment name.
- Activate the previous version deployment.
- Optionally uninstall the newer deployment.
# Roll back to v1.2.2
uipcli solution deploy MySolution -v 1.2.2 -d MySolution-Prod-Rollback-1.2.2 -f Production ...
uipcli solution deploy-activate MySolution-Prod-Rollback-1.2.2 ...
# Roll back to v1.2.2
uipcli solution deploy MySolution -v 1.2.2 -d MySolution-Prod-Rollback-1.2.2 -f Production ...
uipcli solution deploy-activate MySolution-Prod-Rollback-1.2.2 ...
Next steps
After deploying and activating Solutions, you can:
- Monitor execution in Orchestrator.
- Uninstall deployments when no longer needed.
- Deploy new versions following the same workflow.
- Deployment workflow
- Deploying a solution
- Command syntax
- Authentication
- Example
- Deployment naming conventions
- What happens during deployment
- Reusing existing resources
- Steps
- Connection authentication
- Activating a deployment
- Command syntax
- Authentication
- Example
- What happens during activation
- CI/CD pipeline integration
- Complete deployment workflow
- Gated deployments with manual approval
- Multi-environment promotion
- Rollback strategy
- Next steps