- Getting Started with Test Suite
- Studio
- Orchestrator
- Testing robots
- Test Manager
- CI/CD Integrations
Jenkins Plugin
This plugin allows you to build and deploy UiPath automation processes, as well as run UiPath automated test cases.
In order to pack projects created with UiPath Studio starting from 2020.10, you need to use a version starting from 2.1 of this extension.
- Jenkins server running on Windows or Linux.
- At least one Jenkins slave running on Windows (required for step execution).
-
Orchestrator instance (basic, federated or cloud authentication are supported).
- Testing features require Orchestrator version 2020.4 or higher.
- When using an on-premise Orchestrator under HTTPS, make sure to import the SSL Certificate so that the HTTPS calls to Orchestrator can be trusted.
The UiPath Run Job post-build step starts an already deployed process on an Orchestrator instance. The processes this task refers to can be found in Automations->Processes on newer versions of Orchestrator and directly on the Processes tab on older versions of Orchestrator.
Configuration
Job parameter |
Description |
---|---|
Process (Required) |
Process name. You can take the process name from the Orchestrator UI. If the process is deployed in a Modern folder then this argument should be the Name of the process in the Processes tab. If the process is deployed in a Classic folder, then the argument must be formed by the Name of the process and the Environment (for example:
NAME: ProcessA ENVIRONMENT: Production ProcessName: ProcessA_Production ).
|
Parameters |
The full path to a JSON input file. This is used when the Process requires input. |
Priority |
The job run priority. |
Strategy |
Specify the job run strategy, dynamically allocated job(s) or robot-specific job(s). Choose one of the following options:
|
Job Type (available for Modern folders only) |
Choose the license model of the runtime under which the job is to be executed. |
Orchestrator address |
The address of the Orchestrator instance where you'll run the process. |
Orchestrator tenant |
Specify the Orchestrator tenant. |
Orchestrator folder |
Specify the folder where the specified process was deployed. |
Authentication |
For authentication towards Orchestrator, you need to create credentials in Jenkins upfront. There are four options to authenticate: (1) Authenticate to an on-premise Orchestrator using username and password. (2) Authenticate to a cloud Orchestrator using a refresh token (API key). (3) Authenticate to a cloud Orchestrator using external app authentication. (4) Authenticate to a on-premise Orchestrator using external app authentication. |
Job results output path |
Specify the output path of the job results (for example,
testResults.json ). The results are outputted in JSON format.
If not specified, the results are outputted to the artifact staging directory as
UiPathResults.json . The output is in JSON format.
|
Timeout |
Specify the job run(s) timeout in seconds. |
Fail when job fails |
The task fails when at least one job fails. The default value is True. |
Wait for job completion |
Wait for job run(s) completion. The default value is True. |
Trace logging level |
Setting used to enable trace logging to one of the following levels:
|
No. of jobs |
The number of job runs. The default value is 1. |
User (available for Modern folders only) |
The name of the user. This should be a machine user, not an Orchestrator user. For local users, the format should be MachineName\))\))UserName. |
Machine (available for Modern folders only) |
The name of the machine. |
Robot names |
Comma-separated list of specific robot names. |
Pipeline example
pipeline {
agent any
environment {
MAJOR = '1'
MINOR = '0'
}
stages {
stage ('Build') {
UiPathRunJob(
credentials: UserPass('825c83c9-9a14-44eb-883a-af54f8078af0'),
failWhenJobFails: true,
folderName: 'A_Classic',
orchestratorAddress: 'https://testorchestrator.some-domain.com',
orchestratorTenant: 'Default',
parametersFilePath: '',
priority: 'Low',
processName: 'ProcessA_EnvB',
resultFilePath: 'output.json',
strategy: Dynamically(jobsCount: 1, machine: 'TestMachine', user: 'TestUser'), timeout: 3600, waitForJobCompletion: true, traceLoggingLevel: 'None'
)
UiPathRunJob(
credentials: UserPass('825c83c9-9a14-44eb-883a-af54f8078af0'),
failWhenJobFails: true,
folderName: 'A_Classic',
orchestratorAddress: 'https://testorchestrator.some-domain.com',
orchestratorTenant: 'Default',
parametersFilePath: '',
priority: 'Low',
processName: 'ProcessA_EnvB',
resultFilePath: 'output.json',
strategy: Robot('robot1,robot2'),
timeout: 1800,
waitForJobCompletion: false,
traceLoggingLevel: 'None'
)
}
}
}
pipeline {
agent any
environment {
MAJOR = '1'
MINOR = '0'
}
stages {
stage ('Build') {
UiPathRunJob(
credentials: UserPass('825c83c9-9a14-44eb-883a-af54f8078af0'),
failWhenJobFails: true,
folderName: 'A_Classic',
orchestratorAddress: 'https://testorchestrator.some-domain.com',
orchestratorTenant: 'Default',
parametersFilePath: '',
priority: 'Low',
processName: 'ProcessA_EnvB',
resultFilePath: 'output.json',
strategy: Dynamically(jobsCount: 1, machine: 'TestMachine', user: 'TestUser'), timeout: 3600, waitForJobCompletion: true, traceLoggingLevel: 'None'
)
UiPathRunJob(
credentials: UserPass('825c83c9-9a14-44eb-883a-af54f8078af0'),
failWhenJobFails: true,
folderName: 'A_Classic',
orchestratorAddress: 'https://testorchestrator.some-domain.com',
orchestratorTenant: 'Default',
parametersFilePath: '',
priority: 'Low',
processName: 'ProcessA_EnvB',
resultFilePath: 'output.json',
strategy: Robot('robot1,robot2'),
timeout: 1800,
waitForJobCompletion: false,
traceLoggingLevel: 'None'
)
}
}
}
uft-8
.
name,type,value,description
asset_1_name,text,asset_value,this is an test description # we can have comments
asset_2_name,integer,123
asset_3_name,boolean,false
asset_4_name,credential,"username::password"
name,type,value,description
asset_1_name,text,asset_value,this is an test description # we can have comments
asset_2_name,integer,123
asset_3_name,boolean,false
asset_4_name,credential,"username::password"
There are four types of assets:
- Text
- Integer
- Boolean
-
Credential. For the Credential you must encode the username and password by using
::
to separate the two fields.
Configuration
Job parameter |
Description |
---|---|
Action |
What to do with the provided assets: deploy or delete. If a deployed asset exists then it will be updated instead. |
Orchestrator address |
The address of the Orchestrator instance where you'll deploy or update assets. |
Orchestrator tenant |
Specify the Orchestrator tenant onto which the assets will be deployed or updated. |
Orchestrator folder |
Specify the folder where assets will be deployed or updated. |
Authentication |
For authentication towards Orchestrator, you need to create credentials in Jenkins upfront. There are four options to authenticate: (1) Authenticate to an on-premise Orchestrator using username and password. (2) Authenticate to a cloud Orchestrator using a refresh token (API key). (3) Authenticate to a cloud Orchestrator using external app authentication. (4) Authenticate to an on-premise Orchestrator using external app authentication. |
CSV File Path |
The path to the CSV file containing the asset details. The same file can be used to deploy or update the assets, although the type isn't required for updates. The
type field can also be empty, but the column must be present. For delete, only the name column is used, so the other columns can be empty, but they must be present.
You can set an optional description for each asset (for example:
type , value , description ). Make sure to remove any line breaks as each line is interpreted as a new asset.
|
Trace logging level |
Setting used to enable trace logging to one of the following levels:
|
Pipeline example
pipeline {
agent any
environment {
MAJOR = '1'
MINOR = '0'
}
stages {
stage ('Build') {
UiPathAssets (
assetsAction: DeployAssets(),
credentials: Token(accountName: '', credentialsId: ''),
filePath: '${WORKSPACE}/test.csv',
folderName: 'Default',
orchestratorAddress: 'https://test-orchestrator.somedomain.com',
orchestratorTenant: 'Default',
traceLoggingLevel: 'None'
)
UiPathAssets(
assetsAction: DeleteAssets(),
credentials: UserPass('825c83c9-9a14-44eb-883a-af54f8078af0'),
filePath: '${WORKSPACE}/test.csv',
folderName: 'Default',
orchestratorAddress: 'https://test-orchestrator.somedomain.com',
orchestratorTenant: 'Default',
traceLoggingLevel: 'None'
)
}
}
}
pipeline {
agent any
environment {
MAJOR = '1'
MINOR = '0'
}
stages {
stage ('Build') {
UiPathAssets (
assetsAction: DeployAssets(),
credentials: Token(accountName: '', credentialsId: ''),
filePath: '${WORKSPACE}/test.csv',
folderName: 'Default',
orchestratorAddress: 'https://test-orchestrator.somedomain.com',
orchestratorTenant: 'Default',
traceLoggingLevel: 'None'
)
UiPathAssets(
assetsAction: DeleteAssets(),
credentials: UserPass('825c83c9-9a14-44eb-883a-af54f8078af0'),
filePath: '${WORKSPACE}/test.csv',
folderName: 'Default',
orchestratorAddress: 'https://test-orchestrator.somedomain.com',
orchestratorTenant: 'Default',
traceLoggingLevel: 'None'
)
}
}
}
Application: RPA Type: Build task UiPath Pack is available in standard jobs and pipelines, and lets you package an existing UiPath project into a NuGet package.
Configuration
Job parameter |
Description |
---|---|
Choose versioning method |
UiPath packages are versioned. With UiPath pack you can choose between 3 different options: (1) Auto generate (2) Define custom version (3) Use the current version set in the project. |
Project(s) path |
The location of the project(s) to be packaged. It can be a direct path to a
project.json file or a directory with one or more projects. In the latter case, each level one project is packaged individually.
|
Output folder |
Path to a folder where you want to create the package. |
Output type |
The output type of the project(s). There are 5 options for the project(s) type: (1) Output type of the project (2) Pack a process project (3) Pack a library project (4) Pack a tests project (5) Pack an objects project. |
Run workflow analysis |
Run the workflow analysis before packing, checking the project via predefined rules for violations. Fail the job in case of errors. By default, the analysis is not run. |
Trace logging level |
Setting used to enable trace logging to one of the following levels:
|
Use orchestrator |
Use Orchestrator feed when packaging libraries. The Orchestrator must be 20.4 or higher. The library feed needs to allow API Key authentication in Tenant > Setting > Deployment. |
Orchestrator address |
The address of the Orchestrator instance from which library dependencies should be restored. |
Orchestrator tenant |
The Orchestrator tenant from which library dependencies should be restored. |
Authentication |
For authentication towards Orchestrator, you need to create credentials in Jenkins upfront. There are four options to authenticate: (1) Authenticate to an on-premise Orchestrator using username and password. (2) Authenticate to a cloud Orchestrator using a refresh token (API key). (3) Authenticate to a cloud Orchestrator using external app authentication. (4) Authenticate to an on-premise Orchestrator using external app authentication. |
Pipeline example
ipeline {
agent any
environment {
MAJOR = '1'
MINOR = '0'
}
stages {
stage ('Build') {
steps {
UiPathPack (
outputPath: "Output\)\)\)\)${env.BUILD_NUMBER}",
projectJsonPath: "UiBank\)\)\)\)project.json",
version: [$class: 'ManualVersionEntry', version: "${MAJOR}.${MINOR}.${env.BUILD_NUMBER}"]
useOrchestrator: true,
traceLoggingLevel: "None",
orchestratorAddress: "OrchestratorUrl",
orchestratorTenant: "tenant name",
credentials: [$class: 'UserPassAuthenticationEntry', credentialsId: “credentialsId”]
)
}
}
}
}
ipeline {
agent any
environment {
MAJOR = '1'
MINOR = '0'
}
stages {
stage ('Build') {
steps {
UiPathPack (
outputPath: "Output\)\)\)\)${env.BUILD_NUMBER}",
projectJsonPath: "UiBank\)\)\)\)project.json",
version: [$class: 'ManualVersionEntry', version: "${MAJOR}.${MINOR}.${env.BUILD_NUMBER}"]
useOrchestrator: true,
traceLoggingLevel: "None",
orchestratorAddress: "OrchestratorUrl",
orchestratorTenant: "tenant name",
credentials: [$class: 'UserPassAuthenticationEntry', credentialsId: “credentialsId”]
)
}
}
}
}
Application: RPA Type: Post-Build task UiPath Deploy is available in standard jobs and pipelines, and lets you deploy a UiPath NuGet package onto UiPath Orchestrator.
Configuration
Job parameter |
Description |
---|---|
Package(s) path |
The folder that holds your UiPath nuget package(s). |
Orchestrator address |
The address of the Orchestrator instance onto which the package(s) will be deployed. |
Orchestrator tenant |
The Orchestrator tenant onto which the package(s) will be deployed. |
Orchestrator folder |
The folder to deploy to. If the folder is a Classic folder, you'll also need to set the
environments field.
For Modern folders, setting the
environments field is not required.
|
Environments (Required for Classic folders) |
The environment onto which the package will be deployed as a process. For the project and environment with existing processes, the processes will be updated to use the latest project version. Specify the environment onto which the package will be deployed as a process. For the project and environment with existing processes, the processes will be updated to use the latest project version. |
Entry Points |
Specify entry points to create or update a process. The entry point specifies the filePath starting from the root of the project. Conditions:
|
Authentication |
For authentication towards Orchestrator, you need to create credentials in Jenkins upfront. There are four options to authenticate: (1) Authenticate to an on-premise Orchestrator using username and password. (2) Authenticate to a cloud Orchestrator using a refresh token (API key). (3) Authenticate to a cloud Orchestrator using external app authentication. (4) Authenticate to an on-premise Orchestrator using external app authentication. |
Trace logging level |
Setting used to enable trace logging to one of the following levels:
|
Make sure that your network allows access to the following NuGet package feed:
- https://api.nuget.org/v3/index.json
- https://uipath.pkgs.visualstudio.com/_packaging/nuget-packages/nuget/v3/index.json
- https://uipath.pkgs.visualstudio.com/Public.Feeds/_packaging/UiPath-* Internal/nuget/v3/index.json
- https://www.myget.org/F/workflow
- http://www.myget.org/F/uipath
- https://www.myget.org/F/uipath-dev/api/v3/index.json
Pipeline example
pipeline {
agent any
environment {
MAJOR = '1'
MINOR = '0'
}
stages {
stage ('PostBuild') {
steps {
UiPathDeploy (
packagePath: "path\)\)\) o\)\)NuGetpackage",
orchestratorAddress: "OrchestratorUrl",
orchestratorTenant: "tenant name",
folderName: "folder name",
environments: "environment",
credentials: [$class: 'UserPassAuthenticationEntry', credentialsId: “credentialsId”],
traceLoggingLevel: 'None'
)
}
}
}
}
pipeline {
agent any
environment {
MAJOR = '1'
MINOR = '0'
}
stages {
stage ('PostBuild') {
steps {
UiPathDeploy (
packagePath: "path\)\)\) o\)\)NuGetpackage",
orchestratorAddress: "OrchestratorUrl",
orchestratorTenant: "tenant name",
folderName: "folder name",
environments: "environment",
credentials: [$class: 'UserPassAuthenticationEntry', credentialsId: “credentialsId”],
traceLoggingLevel: 'None'
)
}
}
}
}
Application: Testing Type: Post-Build task UiPath Run tests is available in standard jobs and pipelines, and lets you:
- Run an existing Test Set in Orchestrator.
-
Package, deploy and run test cases, by specifying the path to a UiPath test project.
After the test run has finished, the Test Result tab is published to the Jenkins build, showing the detailed results. Additionally, a JUnit test results file is created to the test result output path, when specified, or to the workspace root if not specified.
Depending on the result, the build is either marked as successful (all test cases are passed), or unstable (at least one test case failed).
Configuration
Job parameter |
Description |
---|---|
Target |
|
**Test result output path ** |
The executed test set returns the test result as
junit.xml . Specify the path where the result should be stored, relative to the Jenkins workspace directory (for example, result.xml ).
|
Input Parameters |
Define custom arguments for your test cases to override default values at the test set level. Through the arguments, you can set parameters to test cases at runtime. To define arguments, you need to publish a package with arguments. |
Orchestrator address |
The address of the Orchestrator instance onto which the package(s) will be deployed. |
Orchestrator tenant |
The Orchestrator tenant onto which the package(s) will be deployed. |
Orchestrator folder |
The folder to deploy to. If the folder is a Classic folder, you will also need to set the
environments field.
For Modern folders, setting the
environments . is not required.
|
Environments (Required for Classic folders) |
The environment onto which the package will be deployed as a process. For the project and environment with existing processes, the processes will be updated to use the latest project version. Specify the environment onto which the package will be deployed as a process. For the project and environment with existing processes, the processes will be updated to use the latest project version. |
Authentication |
For authentication towards Orchestrator, you need to create credentials in Jenkins upfront. There are four options to authenticate: (1) Authenticate to an on-premise Orchestrator using username and password. (2) Authenticate to a cloud Orchestrator using a refresh token (API key). (3) Authenticate to a cloud Orchestrator using external app authentication. (4) Authenticate to an on-premise Orchestrator using external app authentication. |
Timeout (seconds) |
The execution timeout for the test run. The default value is 7200 seconds. If the timeout exceeds before the execution on Orchestrator is finished and returns the result, the built will cancel and be marked as failed. |
Trace logging level |
Setting used to enable trace logging to one of the following levels:
|
Pipeline example
pipeline {
agent any
environment {
MAJOR = '1'
MINOR = '0'
}
stages {
stage ('PostBuild') {
steps {
UiPathTest (
testTarget: [$class: 'TestSetEntry', testSet: "My Test Set"],
orchestratorAddress: "OrchestratorUrl",
orchestratorTenant: "tenant name",
folderName: "folder name",
timeout: "10000",
traceLoggingLevel: 'None',
testResultsOutputPath: "result.xml",
credentials: [$class: 'UserPassAuthenticationEntry', credentialsId: "credentialsId"]
)
}
}
}
}
pipeline {
agent any
environment {
MAJOR = '1'
MINOR = '0'
}
stages {
stage ('PostBuild') {
steps {
UiPathTest (
testTarget: [$class: 'TestSetEntry', testSet: "My Test Set"],
orchestratorAddress: "OrchestratorUrl",
orchestratorTenant: "tenant name",
folderName: "folder name",
timeout: "10000",
traceLoggingLevel: 'None',
testResultsOutputPath: "result.xml",
credentials: [$class: 'UserPassAuthenticationEntry', credentialsId: "credentialsId"]
)
}
}
}
}
Step 1: Configure your external application and scopes. After adding the application, keep the App ID, Secret and Application Scopes at hand, to be used for the next step.
Step 2: Configure application credentials as secret text in Jenkins. For this step you need the Secret generated in Automation Cloud.
Step 3: Configure the Authentication for each task under Post-Build Actions, by adding the Account Name, followed by the App ID, Secret and Application Scopes generated through Automation Cloud.
- All paths specified should be local to the current workspace. You can use environment variables in paths, though you should make sure that they result in paths that are local to the workspace.
- To deploy packages or run tests, make sure that the authenticated user has the Folders View (or OrganizationUnits View) and (20.4+ only) Background Tasks View permissions.
- To package libraries, when connected to an Orchestrator instance, make sure that the authenticated user has the Libraries View permission.
-
For further details on managing external apps:
- For cloud Orchestrator - please refer to the official documentation.
- For on-premise Orchestrator - please refer to the official documentation.
If you run into installation or upgrade issues, consider the following troubleshooting scenarios.
Description: Unauthorized error.
Remedy:
-
If you use basic authentication: make sure that the username-password combination on the web login is correct.
If federated authentication is enabled, make sure you write the username in the task as “DOMAIN\user”
-
If you use token authentication:
- Revoke the token from the API access panel and generate a new one.
- Make sure that the user that generated the key can access the Orchestrator and has a user account on the Orchestrator instance.
- If you authenticate against an on-premise Orchestrator: make sure that the Orchestrator certificate is valid and that the machine running the job trusts the Orchestrator certificate in case you are using a self-signed certificate. You might receive this error because of the certificate used for the Orchestrator not being valid. This might mean that it has the wrong CN or other validation issues.
Remedy: the user doesn't have the permission to perform the action. Make sure that the user has permissions to read folders, upload packages, create and update processes, read test sets and test cases, read background tasks, and create and run test sets.
Remedy: Make sure that the authenticated user used by CI/CD plugins has the Folders.View and BackgroundTask.View (only for 20.4) permissions.
Remedy: Make sure that the package that you are trying to deploy does not exist with the same version already. If it exists, consider using automatic package versioning, so that the new version is bumped up every time we deploy.
C:\Windows or C:\Program Files
) to which the user does not have permissions, make sure that the workspace is placed on a path that can be accessed by the
user.
???
.
file.encoding
to UTF-8 in Java options:
When running Jenkins on Windows as a Service: in the service configuration file add the arguments inside the tag. Follow the sample script below.
<arguments>-Xrs -Xmx512m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dfile.encoding=UTF-8 -jar "%BASE%\)\)jenkins.war" --httpPort=8080 --webroot="%BASE%\)\)war"</arguments>
<arguments>-Xrs -Xmx512m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dfile.encoding=UTF-8 -jar "%BASE%\)\)jenkins.war" --httpPort=8080 --webroot="%BASE%\)\)war"</arguments>
--env JAVA_OPTS="..."
, following the example script below.
docker run --name myjenkins -p 8080:8080 -p 50000:50000 --env JAVA_OPTS=-Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dfile.encoding=UTF-8 jenkins/jenkins:lts
docker run --name myjenkins -p 8080:8080 -p 50000:50000 --env JAVA_OPTS=-Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dfile.encoding=UTF-8 jenkins/jenkins:lts
CATALINA_OPTS
. Follow the example script below.
export CATALINA_OPTS="-DJENKINS_HOME=/path/to/jenkins_home/ -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dfile.encoding=UTF-8 -Xmx512m"
export CATALINA_OPTS="-DJENKINS_HOME=/path/to/jenkins_home/ -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dfile.encoding=UTF-8 -Xmx512m"
JAVA_ARGS
, and add the file encoding. Follow the example script below:
JAVA_ARGS="-Dfile.encoding=UTF-8 -Xmx512m"
JAVA_ARGS="-Dfile.encoding=UTF-8 -Xmx512m"
When running on RedHat Linux-based distributions: in the configuration file search for the argument JENKINS_JAVA_OPTIONS and add the file encoding. Follow the sample script below.
JENKINS_JAVA_OPTIONS="-Dfile.encoding=UTF-8 -Xmx512m"
JENKINS_JAVA_OPTIONS="-Dfile.encoding=UTF-8 -Xmx512m"
- Prerequisites
- Installing and enabling the plugin
- Jobs
- UiPath Run Job
- UiPath Manage Assets
- UiPath Pack
- UiPath Deploy
- UiPath Run Tests
- Obtaining the Cloud Orchestrator API Key
- Configure Service Connection for External Apps
- Additional Information
- Troubleshooting Jenkins Plugin
- Unauthorized error
- Forbidden error
- Folder/environment not found
- Package already exists (Conflict)
- Failed to run the command (Generic error)
- Jenkins fails to process paths containing non-Latin characters
- Windows
- Linux