UiPath Documentation
cicd-integrations
2025.10
true
CI/CD integrations user guide

Deploying and Activating Solutions

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.

Tip:

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:

  1. Deploy: Create a deployment configuration and associate the package with a target folder.
  2. 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
ParameterDescriptionRequired
<package-name>Name of the uploaded packageYes
-v or --versionPackage version to deployYes
-d or --deploymentNameName for this deploymentYes
-f or --deploymentFolderNameTarget folder name in OrchestratorYes
-UOrchestrator URLYes
-TTenant nameYes
-AOrganization nameYes
-IExternal App IDYes
-SExternal App secretYes
--applicationScopeOptional scopes (defaults applied)No
--deploymentParentFolderThe 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
--configPathLocal path to solution configuration file; needed in scenarios with overwriting bindings. See Downloading Solution Packages and Configs for details on obtaining configuration files.No
--traceLevelLogging levelNo
--ca-certTrusted root CA file(s) (PEM, DER, or PKCS#7) for the Orchestrator/Identity TLS certificate. Repeat or comma-separate. See Trusting custom certificates.No
--pinnedpubkeyPin the leaf public key (sha256//<base64>). See Trusting custom certificates.No
Note:

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.

Important:

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.

Important:

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:

  1. The package is validated in Solutions.
  2. A deployment configuration is created.
  3. The deployment is associated with the target folder.
  4. Environment-specific bindings are initialized.
  5. 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.

Note:

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

  1. 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"
    
  2. Open the downloaded configuration file.

  3. Locate the entry for the resource you want to reuse.

  4. Add a linkToResource block 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 linkToResource object points the Solution's resource at the existing one; the fields under configuration vary by resource type.

  5. 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
ParameterDescriptionRequired
<deployment-name>Name of the deployment to activateYes
-UOrchestrator URLYes
-TTenant nameYes
-AOrganization nameYes
-IExternal App IDYes
-SExternal App secretYes
--applicationScopeRequired scopesYes
--traceLevelLogging levelNo
--ca-certTrusted root CA file(s) (PEM, DER, or PKCS#7) for the Orchestrator/Identity TLS certificate. Repeat or comma-separate. See Trusting custom certificates.No
--pinnedpubkeyPin 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:

  1. The deployment becomes the active version in the target folder.
  2. Triggers are activated.
  3. 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:

  1. Deploy the previous version with a new deployment name.
  2. Activate the previous version deployment.
  3. 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:

  1. Monitor execution in Orchestrator.
  2. Uninstall deployments when no longer needed.
  3. Deploy new versions following the same workflow.

Was this page helpful?

Connect

Need help? Support

Want to learn? UiPath Academy

Have questions? UiPath Forum

Stay updated