uipath-cli
latest
false
重要 :
请注意,此内容已使用机器翻译进行了本地化。
新发布内容的本地化可能需要 1-2 周的时间才能完成。
UiPath CLI 用户指南
每个uip调用都以数字退出代码结束。脚本和 CI 管道在这些代码上分支,以区分成功、需要重试的暂时错误、需要人工注意的凭据问题以及命令行的误用。
合同
退出代码由命令输出信封中的Result字段决定。主机将每个Result值映射到单个退出代码:
| 退出代码 | Result 值 | 意义 |
|---|---|---|
| 0 | Success | 命令已完成,已实现其意图。 |
| 1 | Failure, ConfigError | CLI 在到达服务器之前可以检测到的一般故障或配置问题(缺少租户、磁盘上缺少文件等)。 |
| 2 | AuthenticationError | 会话未经过身份验证,令牌已过期或 Orchestrator 拒绝了凭据(401、403)。 |
| 3 | ValidationError | 使用无效输入调用命令 - 未知标志、标志值错误、标志互斥、格式--output-filter等。 |
| 4 | TimeoutError | 长时间运行的操作已超过其截止日期。预留以备将来使用 — 目前没有命令发出此错误,但合同很稳定,因此针对该合同编写的脚本将继续工作。 |
此外:
| 退出代码 | 来源 | 意义 |
|---|---|---|
| 130 | Shell 约定(128 + SIGINT) | 用户取消了交互式提示(在uip login 、 uip skills install 、 uip completion等操作中按 Ctrl+C)。 |
UiPath CLI 不会发出其他退出代码。在此表格之外的值表示异常终止(未捕获的崩溃、失控的子流程或 Shell 报告信号),应进行调查,而不是进行模式匹配。
稳定性
0、1、2和3在 MAJOR 版本中稳定运行。对于给定输入,如果命令以3(验证)退出,则在 Minor 和 PATCH 阶段,该命令将继续退出,并为3。4已保留。未来的次要版本可能会开始从长时间运行的命令中发出该错误;已将4处理为“超时”的脚本将继续运行。- 可能会在主要版本中添加新代码,并会在发行说明中事先通知。当前集合涵盖 UiPath CLI 1.x 所需的所有故障模式。
有关更广泛的语义化版本合同,请参阅版本控制和稳定性。
读取脚本中的退出代码
bash/sh/zsh
uip or folders list
case $? in
0) echo "ok" ;;
1) echo "command failed" ;;
2) echo "not authenticated — run uip login" ;;
3) echo "bad input — check flags" ;;
4) echo "timed out" ;;
130) echo "cancelled by user" ;;
*) echo "unexpected exit: $?" ;;
esac
uip or folders list
case $? in
0) echo "ok" ;;
1) echo "command failed" ;;
2) echo "not authenticated — run uip login" ;;
3) echo "bad input — check flags" ;;
4) echo "timed out" ;;
130) echo "cancelled by user" ;;
*) echo "unexpected exit: $?" ;;
esac
set -e (或set -o errexit )会在任何非零退出时中止脚本。这是 CI 的常见默认设置;当您需要区分代码时,请将其与trap或按命令处理结合使用:
set -euo pipefail
if ! uip or folders list --output json > folders.json; then
case $? in
2) uip login ; uip or folders list --output json > folders.json ;;
*) exit $? ;;
esac
fi
set -euo pipefail
if ! uip or folders list --output json > folders.json; then
case $? in
2) uip login ; uip or folders list --output json > folders.json ;;
*) exit $? ;;
esac
fi
PowerShell
uip or folders list
switch ($LASTEXITCODE) {
0 { Write-Host "ok" }
1 { Write-Host "command failed" }
2 { Write-Host "not authenticated" }
3 { Write-Host "bad input" }
4 { Write-Host "timed out" }
130 { Write-Host "cancelled" }
default { Write-Host "unexpected exit: $LASTEXITCODE" }
}
uip or folders list
switch ($LASTEXITCODE) {
0 { Write-Host "ok" }
1 { Write-Host "command failed" }
2 { Write-Host "not authenticated" }
3 { Write-Host "bad input" }
4 { Write-Host "timed out" }
130 { Write-Host "cancelled" }
default { Write-Host "unexpected exit: $LASTEXITCODE" }
}
GitHub 操作
默认情况下, run:步骤中的任何非零退出都会失败。要在特定代码上进行分支,请显式捕获代码:
- name: Query Orchestrator
id: folders
run: |
uip or folders list --output json > folders.json
echo "exit_code=$?" >> "$GITHUB_OUTPUT"
continue-on-error: true
- name: Re-authenticate if expired
if: steps.folders.outputs.exit_code == '2'
run: uip login --client-id env.UIPATH_CLIENT_ID --client-secret env.UIPATH_CLIENT_SECRET --tenant "$TENANT"
env:
UIPATH_CLIENT_ID: ${{ secrets.UIPATH_CLIENT_ID }}
UIPATH_CLIENT_SECRET: ${{ secrets.UIPATH_CLIENT_SECRET }}
TENANT: ${{ vars.UIPATH_TENANT }}
- name: Query Orchestrator
id: folders
run: |
uip or folders list --output json > folders.json
echo "exit_code=$?" >> "$GITHUB_OUTPUT"
continue-on-error: true
- name: Re-authenticate if expired
if: steps.folders.outputs.exit_code == '2'
run: uip login --client-id env.UIPATH_CLIENT_ID --client-secret env.UIPATH_CLIENT_SECRET --tenant "$TENANT"
env:
UIPATH_CLIENT_ID: ${{ secrets.UIPATH_CLIENT_ID }}
UIPATH_CLIENT_SECRET: ${{ secrets.UIPATH_CLIENT_SECRET }}
TENANT: ${{ vars.UIPATH_TENANT }}
将退出代码与 JSON 信封匹配
当--output json生效(默认设置)时,信封包含与退出代码相同的信息,以及人类可读的消息:
{
"Result": "ValidationError",
"Message": "Unknown option '--folder-pth'. Did you mean '--folder-path'?",
"Instructions": "Run 'uip or folders list --help' to see valid options."
}
{
"Result": "ValidationError",
"Message": "Unknown option '--folder-pth'. Did you mean '--folder-path'?",
"Instructions": "Run 'uip or folders list --help' to see valid options."
}
管道可以在$?上进行分支,以快速做出决策(重试 2,中止 3),并解析信封以获取完整的错误图片(在 Slack Webhook 中显示Message ,在失败的步骤旁边显示Instructions ,等)。
特定于命令的语义
退出代码是状态代码,不是成功代码。使用指示“未找到结果”的Data有效负载报告Success的命令仍会存在0 。例如, uip or folders list --all --name DoesNotExist返回{"Data": [], …}并退出0 — 因为列表查询成功;缺少匹配项是有效结果,并非失败。
当命令需要区分“操作成功”和“域结果为正”时,它会在其参考页面中如此说明:
uip tm testsets run— 在 Orchestrator 接受测试运行请求并返回ExecutionId后,始终退出0。通过/失败判定来自单独的uip tm wait+uip tm report get链;报告输出中的Data.Failed上的分支。uip tm wait在超时时发出退出代码2(对身份验证错误槽进行特定于域的重用 — 请参阅uip tmwait和uip tm 执行)。uip or jobs start --wait-for-completion— 当作业达到最终Faulted或Stopped状态时,以非零值退出。如果没有--wait-for-completion,一旦 Orchestrator 接受请求,无论之后的作业结果如何,命令都会退出0。
检查“成功”语义不明确的任何命令的参考页面。