- 概要
- はじめに
- 概念
- UiPath CLI を使用する
- UiPath for Coding Agents
- 使用ガイド
- CI/CD レシピ
- Azure DevOps
- GitHub Actions
- Jenkins
- GitLab CI
- コマンド リファレンス
- 概要
- 終了コード
- グローバル オプション
- uip codedagent
- uip docsai
- add-test-data-entity
- テスト データのキューを追加
- 追加-テスト-データ-バリエーション
- 分析
- 開発
- プロジェクトを作成
- 差分
- アクティビティを検索
- GET-ANALYZER-RULES
- get-default-activity-xaml
- エラーを取得
- 手動テスト用のテスト ケースを取得
- 手動テストステップを取得
- get-versions
- Get-workflow-example
- indicate-application
- 要素を示す
- inspect-package
- install-data-fabric-entities
- パッケージのインストールまたは更新
- list-data-fabric-entities
- list-workflow-examples
- パッケージ化
- 元に戻す
- ファイル名を実行
- 検索テンプレート
- スタートスタジオ
- 実行を停止
- UIA
- UIP トレース
- 移行
- 参照とサポート
UiPath CLI ユーザー ガイド
このページでは、CLI のインストール、外部アプリケーションでの認証、UiPath ソリューションのパッケージ化とパブリッシュ、Orchestrator へのデプロイ、デプロイに対する Test Manager スイートの実行をすべて.github/workflows/deploy.yml説明します。リポジトリにドロップし、シークレットを 2 つ追加すると実行されます。
基本原則 (認証、キャッシュ、ツールのプレインストール、バージョンのピン留め) については、「 方法: CI から Orchestrator にデプロイする」をご覧ください。このページでは、GitHub Actions の構文に焦点を当てています。
前提条件
以下の YAML をコピーする前に:
- パイプラインに必要な
OR.*スコープを持つ外部アプリケーションを UiPath で作成します。「認証 — フロー 2」を参照してください。 - シークレットを リポジトリ (または組織/環境) の設定に保存します。
- [設定] → [シークレットと変数] → [アクション] → [新しいリポジトリ シークレット]
UIPATH_CLIENT_IDとUIPATH_CLIENT_SECRETをシークレットとして追加します。UIPATH_TENANTを変数として追加します (シークレットではなく、機密情報ではありません)。
- テスト ジョブが必要な場合は、Test Manager プロジェクトとテスト セットをプロビジョニングします。Put
TEST_SET_KEY(例:PROJECT:42) とPROJECT_KEYリポジトリ変数に格納します。「 方法: CLI からテストを実行する」をご覧ください。
.github/workflows/deploy.yml
name: Deploy UiPath Solution
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:
env:
CLI_VERSION: '1.0.0'
NODE_VERSION: '20'
SOLUTION_NAME: 'my-solution'
SOLUTION_DIR: './my-solution'
OUTPUT_DIR: './dist'
jobs:
build:
name: Pack Solution
runs-on: ubuntu-latest
outputs:
solution_version: ${{ steps.version.outputs.version }}
steps:
- uses: actions/checkout@v4
- name: Compute version
id: version
run: echo "version=1.2.0-ci.${{ github.run_number }}" >> "$GITHUB_OUTPUT"
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Cache npm global (@uipath/cli)
uses: actions/cache@v4
with:
path: ~/.npm-global/lib/node_modules
key: uip-${{ env.CLI_VERSION }}-${{ runner.os }}
- name: Install UiPath CLI
shell: bash
run: |
set -euo pipefail
mkdir -p "$HOME/.npm-global"
npm config set prefix "$HOME/.npm-global"
echo "$HOME/.npm-global/bin" >> "$GITHUB_PATH"
export PATH="$HOME/.npm-global/bin:$PATH"
if ! command -v uip >/dev/null; then
npm install -g "@uipath/cli@${CLI_VERSION}"
fi
uip --version
- name: Pack Solution
id: pack
shell: bash
run: |
set -euo pipefail
mkdir -p "$OUTPUT_DIR"
uip solution pack "$SOLUTION_DIR" "$OUTPUT_DIR" \
--name "$SOLUTION_NAME" \
--version "${{ steps.version.outputs.version }}"
ARTIFACT=$(find "$OUTPUT_DIR" -maxdepth 1 -name "*.zip" | head -1)
echo "artifact=$ARTIFACT" >> "$GITHUB_OUTPUT"
- uses: actions/upload-artifact@v4
with:
name: solution-zip
path: ${{ steps.pack.outputs.artifact }}
deploy:
name: Publish and deploy
needs: build
runs-on: ubuntu-latest
environment: uipath-prod # attach approval gates here if needed
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Cache npm global (@uipath/cli)
uses: actions/cache@v4
with:
path: ~/.npm-global/lib/node_modules
key: uip-${{ env.CLI_VERSION }}-${{ runner.os }}
- name: Install UiPath CLI
shell: bash
run: |
set -euo pipefail
mkdir -p "$HOME/.npm-global"
npm config set prefix "$HOME/.npm-global"
echo "$HOME/.npm-global/bin" >> "$GITHUB_PATH"
export PATH="$HOME/.npm-global/bin:$PATH"
if ! command -v uip >/dev/null; then
npm install -g "@uipath/cli@${CLI_VERSION}"
fi
- uses: actions/download-artifact@v4
with:
name: solution-zip
path: ${{ env.OUTPUT_DIR }}
- name: Authenticate
shell: bash
env:
UIPATH_CLIENT_ID: ${{ secrets.UIPATH_CLIENT_ID }}
UIPATH_CLIENT_SECRET: ${{ secrets.UIPATH_CLIENT_SECRET }}
UIPATH_TENANT: ${{ vars.UIPATH_TENANT }}
run: |
set -euo pipefail
uip login \
--client-id env.UIPATH_CLIENT_ID \
--client-secret env.UIPATH_CLIENT_SECRET \
--tenant "$UIPATH_TENANT"
- name: Publish to tenant feed
shell: bash
run: |
set -euo pipefail
ARTIFACT=$(find "$OUTPUT_DIR" -maxdepth 1 -name "*.zip" | head -1)
uip solution publish "$ARTIFACT"
- name: Deploy to Orchestrator
shell: bash
run: |
set -euo pipefail
uip solution deploy run \
--name "${SOLUTION_NAME}-${{ github.run_number }}" \
--package-name "$SOLUTION_NAME" \
--package-version "${{ needs.build.outputs.solution_version }}" \
--folder-name MySolution \
--folder-path Shared
test:
name: Run Test Manager suite
needs: deploy
if: ${{ vars.TEST_SET_KEY != '' }}
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Cache npm global (@uipath/cli)
uses: actions/cache@v4
with:
path: ~/.npm-global/lib/node_modules
key: uip-${{ env.CLI_VERSION }}-${{ runner.os }}
- name: Install CLI and authenticate
shell: bash
env:
UIPATH_CLIENT_ID: ${{ secrets.UIPATH_CLIENT_ID }}
UIPATH_CLIENT_SECRET: ${{ secrets.UIPATH_CLIENT_SECRET }}
UIPATH_TENANT: ${{ vars.UIPATH_TENANT }}
run: |
set -euo pipefail
mkdir -p "$HOME/.npm-global"
npm config set prefix "$HOME/.npm-global"
echo "$HOME/.npm-global/bin" >> "$GITHUB_PATH"
export PATH="$HOME/.npm-global/bin:$PATH"
if ! command -v uip >/dev/null; then
npm install -g "@uipath/cli@${CLI_VERSION}"
fi
uip login \
--client-id env.UIPATH_CLIENT_ID \
--client-secret env.UIPATH_CLIENT_SECRET \
--tenant "$UIPATH_TENANT"
- name: Launch, wait, verify
shell: bash
env:
TEST_SET_KEY: ${{ vars.TEST_SET_KEY }}
PROJECT_KEY: ${{ vars.PROJECT_KEY }}
run: |
set -euo pipefail
EXECUTION_ID=$(uip tm testsets run \
--test-set-key "$TEST_SET_KEY" \
--output-filter "Data.ExecutionId" \
--output plain)
echo "started execution $EXECUTION_ID"
if ! uip tm wait \
--execution-id "$EXECUTION_ID" \
--project-key "$PROJECT_KEY" \
--timeout 1800; then
code=$?
case "$code" in
2) echo "::error::test run did not finish within 30 minutes"; exit 2 ;;
*) echo "::error::wait failed (exit $code)"; exit "$code" ;;
esac
fi
uip tm report get \
--execution-id "$EXECUTION_ID" \
--project-key "$PROJECT_KEY"
FAILED=$(uip tm report get \
--execution-id "$EXECUTION_ID" \
--project-key "$PROJECT_KEY" \
--output-filter "Data.Failed" \
--output plain)
if [ "$FAILED" -gt 0 ]; then
echo "::error::$FAILED test case(s) failed"
exit 1
fi
name: Deploy UiPath Solution
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:
env:
CLI_VERSION: '1.0.0'
NODE_VERSION: '20'
SOLUTION_NAME: 'my-solution'
SOLUTION_DIR: './my-solution'
OUTPUT_DIR: './dist'
jobs:
build:
name: Pack Solution
runs-on: ubuntu-latest
outputs:
solution_version: ${{ steps.version.outputs.version }}
steps:
- uses: actions/checkout@v4
- name: Compute version
id: version
run: echo "version=1.2.0-ci.${{ github.run_number }}" >> "$GITHUB_OUTPUT"
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Cache npm global (@uipath/cli)
uses: actions/cache@v4
with:
path: ~/.npm-global/lib/node_modules
key: uip-${{ env.CLI_VERSION }}-${{ runner.os }}
- name: Install UiPath CLI
shell: bash
run: |
set -euo pipefail
mkdir -p "$HOME/.npm-global"
npm config set prefix "$HOME/.npm-global"
echo "$HOME/.npm-global/bin" >> "$GITHUB_PATH"
export PATH="$HOME/.npm-global/bin:$PATH"
if ! command -v uip >/dev/null; then
npm install -g "@uipath/cli@${CLI_VERSION}"
fi
uip --version
- name: Pack Solution
id: pack
shell: bash
run: |
set -euo pipefail
mkdir -p "$OUTPUT_DIR"
uip solution pack "$SOLUTION_DIR" "$OUTPUT_DIR" \
--name "$SOLUTION_NAME" \
--version "${{ steps.version.outputs.version }}"
ARTIFACT=$(find "$OUTPUT_DIR" -maxdepth 1 -name "*.zip" | head -1)
echo "artifact=$ARTIFACT" >> "$GITHUB_OUTPUT"
- uses: actions/upload-artifact@v4
with:
name: solution-zip
path: ${{ steps.pack.outputs.artifact }}
deploy:
name: Publish and deploy
needs: build
runs-on: ubuntu-latest
environment: uipath-prod # attach approval gates here if needed
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Cache npm global (@uipath/cli)
uses: actions/cache@v4
with:
path: ~/.npm-global/lib/node_modules
key: uip-${{ env.CLI_VERSION }}-${{ runner.os }}
- name: Install UiPath CLI
shell: bash
run: |
set -euo pipefail
mkdir -p "$HOME/.npm-global"
npm config set prefix "$HOME/.npm-global"
echo "$HOME/.npm-global/bin" >> "$GITHUB_PATH"
export PATH="$HOME/.npm-global/bin:$PATH"
if ! command -v uip >/dev/null; then
npm install -g "@uipath/cli@${CLI_VERSION}"
fi
- uses: actions/download-artifact@v4
with:
name: solution-zip
path: ${{ env.OUTPUT_DIR }}
- name: Authenticate
shell: bash
env:
UIPATH_CLIENT_ID: ${{ secrets.UIPATH_CLIENT_ID }}
UIPATH_CLIENT_SECRET: ${{ secrets.UIPATH_CLIENT_SECRET }}
UIPATH_TENANT: ${{ vars.UIPATH_TENANT }}
run: |
set -euo pipefail
uip login \
--client-id env.UIPATH_CLIENT_ID \
--client-secret env.UIPATH_CLIENT_SECRET \
--tenant "$UIPATH_TENANT"
- name: Publish to tenant feed
shell: bash
run: |
set -euo pipefail
ARTIFACT=$(find "$OUTPUT_DIR" -maxdepth 1 -name "*.zip" | head -1)
uip solution publish "$ARTIFACT"
- name: Deploy to Orchestrator
shell: bash
run: |
set -euo pipefail
uip solution deploy run \
--name "${SOLUTION_NAME}-${{ github.run_number }}" \
--package-name "$SOLUTION_NAME" \
--package-version "${{ needs.build.outputs.solution_version }}" \
--folder-name MySolution \
--folder-path Shared
test:
name: Run Test Manager suite
needs: deploy
if: ${{ vars.TEST_SET_KEY != '' }}
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Cache npm global (@uipath/cli)
uses: actions/cache@v4
with:
path: ~/.npm-global/lib/node_modules
key: uip-${{ env.CLI_VERSION }}-${{ runner.os }}
- name: Install CLI and authenticate
shell: bash
env:
UIPATH_CLIENT_ID: ${{ secrets.UIPATH_CLIENT_ID }}
UIPATH_CLIENT_SECRET: ${{ secrets.UIPATH_CLIENT_SECRET }}
UIPATH_TENANT: ${{ vars.UIPATH_TENANT }}
run: |
set -euo pipefail
mkdir -p "$HOME/.npm-global"
npm config set prefix "$HOME/.npm-global"
echo "$HOME/.npm-global/bin" >> "$GITHUB_PATH"
export PATH="$HOME/.npm-global/bin:$PATH"
if ! command -v uip >/dev/null; then
npm install -g "@uipath/cli@${CLI_VERSION}"
fi
uip login \
--client-id env.UIPATH_CLIENT_ID \
--client-secret env.UIPATH_CLIENT_SECRET \
--tenant "$UIPATH_TENANT"
- name: Launch, wait, verify
shell: bash
env:
TEST_SET_KEY: ${{ vars.TEST_SET_KEY }}
PROJECT_KEY: ${{ vars.PROJECT_KEY }}
run: |
set -euo pipefail
EXECUTION_ID=$(uip tm testsets run \
--test-set-key "$TEST_SET_KEY" \
--output-filter "Data.ExecutionId" \
--output plain)
echo "started execution $EXECUTION_ID"
if ! uip tm wait \
--execution-id "$EXECUTION_ID" \
--project-key "$PROJECT_KEY" \
--timeout 1800; then
code=$?
case "$code" in
2) echo "::error::test run did not finish within 30 minutes"; exit 2 ;;
*) echo "::error::wait failed (exit $code)"; exit "$code" ;;
esac
fi
uip tm report get \
--execution-id "$EXECUTION_ID" \
--project-key "$PROJECT_KEY"
FAILED=$(uip tm report get \
--execution-id "$EXECUTION_ID" \
--project-key "$PROJECT_KEY" \
--output-filter "Data.Failed" \
--output plain)
if [ "$FAILED" -gt 0 ]; then
echo "::error::$FAILED test case(s) failed"
exit 1
fi
チュートリアル
ジョブを構築
actions/setup-node@v4Node をNODE_VERSIONで指定されたメジャー バージョンに固定します。CLI にはノード 18+ が必要です。actions/cache@v4は、ピン留めされた CLI バージョンとランナー OS をキーとする npm グローバルnode_modulesディレクトリをキャッシュします。キャッシュがヒットすると、インストールステップのif ! command -v uipガードはno-opに変わります。- インストールステップ では、ユーザーローカルのnpmプレフィックス(GitHubホストランナーでは
sudoは必要ありません)を構成し、それをGITHUB_PATHに追加して、後のステップでuipコマンドを参照し、CLIをインストールします。ツールコマンド(uip solution …、uip tm …)を最初に呼び出すと、そのツールが自動インストールされます—明示的なuip tools installは必要ありません。「 UiPath CLI — CI/CD をインストールする」をご覧ください。 - pack ステップは、
github.run_numberからビルドされた明示的な--version(単調で、リポジトリ内の実行ごとに一意) でuip solution packを呼び出します。このステップでは、ファイル名をハードコーディングするのではなく、生成された.zipパスをfindでキャプチャし、CLI の命名規則の変更間でレシピを安定させます。 actions/upload-artifact@v4はキャプチャした.zipをアップロードし、deployジョブが次回の実行でダウンロードできるようにします。outputs.solution_version計算されたバージョンがdeployジョブに反映されます。これは、同じワークフロー内のジョブ間で値を共有する最も簡単な方法です。
ジョブをデプロイ
- CLI を再インストール する — ジョブの順序を強制
needs: buildが、各ジョブは新しいランナーで実行されます。キャッシュは2回目のインストールでヒットするはずです。 actions/download-artifact@v4、solution-zipを$OUTPUT_DIRにプルします。- [認証] ステップ は、ステップの
env:ブロックを介してシークレットを渡し、uip loginenv.プレフィックスを介してシークレットを読み取ります。env.VAR_NAME接頭辞は、コマンドラインからシークレットを保持するためにサポートされている方法です — Authentication — the env を参照してください。VAR_NAMEプレフィックス。--client-secret "${{ secrets.UIPATH_CLIENT_SECRET }}"を書かない — レンダリングされたコマンドとステップログに値が埋め込まれます。 - パブリッシュ + デプロイのステップでは、
uip solution publishとuip solution deploy runを使用します。--nameではgithub.run_numberが使用されるため、各デプロイを識別できます。 environment: uipath-prodジョブをデプロイ環境と関連付けます。環境は、必要なレビュアー、待機タイマー、デプロイブランチを設定する場所であり、それらをUIに保持し、YAML宣言のままにします。
テスト ジョブ
TEST_SET_KEY リポジトリ変数が設定されている場合にのみ実行され、設定されていない場合は if: ガードによってスキップされます。シェルブロックは、「 方法:CLIからテストを実行する 」 →パターンの検証→待機 する正規の起動です。
uip tm testsets runが起動し、ExecutionIdが返されます。uip tm waitは、終了状態までブロックします。exit2は、waitのタイムアウトを意味します (認証の失敗ではありません)。終了コードは::error::で報告されるため、Actions UI に表示されます。uip tm report getData.Failedを読み取り、何かが失敗すると1ステップを終了します。
一般的なバリエーション
環境間でプロモートする
1 つ目のジョブに依存する 2 つ目の deploy ジョブを、異なるシークレットで追加します。
deploy-stage:
needs: build
environment: uipath-stage
# …same steps as `deploy`, using ${{ secrets.UIPATH_STAGE_CLIENT_ID }} etc.
deploy-prod:
needs: deploy-stage
environment: uipath-prod # add "Required reviewers" in the environment settings
# …same steps as `deploy`, using ${{ secrets.UIPATH_PROD_CLIENT_ID }} etc.
deploy-stage:
needs: build
environment: uipath-stage
# …same steps as `deploy`, using ${{ secrets.UIPATH_STAGE_CLIENT_ID }} etc.
deploy-prod:
needs: deploy-stage
environment: uipath-prod # add "Required reviewers" in the environment settings
# …same steps as `deploy`, using ${{ secrets.UIPATH_PROD_CLIENT_ID }} etc.
承認ゲートは環境設定に存在し、 needs: チェーンは秩序を強制します。「 方法: ソリューションをパッケージ化してパブリッシュする — 1 つのパッケージを複数のテナントに昇格させる」をご覧ください。
ロールバック
workflow_dispatch入力と、特定のバージョンを再デプロイする保護されたジョブを追加します。
on:
workflow_dispatch:
inputs:
rollback_version:
description: 'Version to roll back to (e.g. 1.1.9)'
required: false
type: string
jobs:
rollback:
if: ${{ github.event.inputs.rollback_version != '' }}
runs-on: ubuntu-latest
# …install + auth…
steps:
- name: Re-deploy previous version
run: |
uip solution deploy run \
--name "${SOLUTION_NAME}-rollback" \
--package-name "$SOLUTION_NAME" \
--package-version "${{ github.event.inputs.rollback_version }}" \
--folder-name MySolution \
--folder-path Shared
on:
workflow_dispatch:
inputs:
rollback_version:
description: 'Version to roll back to (e.g. 1.1.9)'
required: false
type: string
jobs:
rollback:
if: ${{ github.event.inputs.rollback_version != '' }}
runs-on: ubuntu-latest
# …install + auth…
steps:
- name: Re-deploy previous version
run: |
uip solution deploy run \
--name "${SOLUTION_NAME}-rollback" \
--package-name "$SOLUTION_NAME" \
--package-version "${{ github.event.inputs.rollback_version }}" \
--folder-name MySolution \
--folder-path Shared
[アクションでトリガー] → [UiPath ソリューションをデプロイ] → [ワークフローを実行 ] をクリックし、ロールバック バージョンを入力します。破壊的なロールバック (アンインストール + solution packages delete) については、「 方法: ソリューションをパックして発行する — ロールバック」を参照してください。
テストをスキップ
TEST_SET_KEY リポジトリ変数を設定します (または未設定のままにします)。if: ${{ vars.TEST_SET_KEY != '' }}ガードはジョブ全体をスキップします。
よくある落とし穴
${{ secrets.X }}補間。ステップレンダリングレイヤーで置き換えます。シークレットをrun:コマンドラインに直接配置すると、その値はレンダリングされたスクリプトの一部になり、GitHubがマスクしない限り、ステップログになります。シークレットは常にenv:にルーティングし、uip内のenv.VAR_NAMEと共に読み取ります。$GITHUB_PATH対$PATH。あるステップでPATH=…エクスポートしても、次のステップには持ち越されません。echo "…" >> "$GITHUB_PATH"を使用して、同じランナー上のステップ間で PATH の追加を永続化します。strict shell optionsです。すべての複数行run:をset -euo pipefailで開始します — これを使用しないと、失敗したuip solution packの後に古い成果物を「成功」して公開する可能性があります。スクリプトパターン — 厳密なシェルオプション を参照してください。- キャッシュの誤検知。
CLI_VERSIONをバンプしても、キャッシュキーにそれが含まれていない場合は、古いCLIを使い続けることになります。このYAMLのキーには、まさにこの理由から${{ env.CLI_VERSION }}が含まれています。 - キャッシュ パスは npm プレフィックスに結合されます。キャッシュブロックは
~/.npm-global/lib/node_modulesを使用します。これは、インストール手順がnpm config set prefix "$HOME/.npm-global"で実行される場合にのみ機能します。プレフィックスを変更する場合(たとえば、規則が%APPDATA%\npm\node_modulesされているセルフホストのWindowsランナーの場合)、キャッシュpath:とnpm config set prefix行の両方が一緒に移動する必要があります。ubuntu-latest 以外のランナーでは、最初に実際のパスを- run: npm root -gでダンプし、報告されたものをミラーリングします。
参照
- 方法: CI から Orchestrator にデプロイ する — プラットフォームに依存しないガイダンス。
- 方法: ソリューションをパッケージ化してパブリッシュする — バージョン管理とロールバック
- 方法: CLI からテストを実行する — 起動→待機→検証パターン。
- CI/CD レシピ: Azure Pipelines、 Jenkins、 GitLab CI — 他のプラットフォームの同じパイプライン。