关于 uipath-solution
uipath-solution 是通过 `uip solution` CLI 管理 UiPath Solution 生命周期的技能,涵盖项目设置、打包、发布和部署。它还介绍资源刷新、上传到 Studio Web,以及在不同环境间推广软件包。
主要功能
- 01初始化解决方案并管理项目
- 02刷新解决方案资源
- 03打包和发布 `.uipx` 软件包
- 04执行和管理部署
- 05支持上传至 Studio Web 和跨环境推广
适用场景
- 01创建解决方案并添加自动化项目
- 02打包并发布解决方案以供部署
- 03在开发、测试和生产环境间推广软件包
- 04上传解决方案到 Studio Web 进行调试
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ uipath/ skills --skill uipath-solution安装后在 Claude Code 中输入/uipath-solution确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/activate-and-manage.mddevelop-solution.mdpack-and-deploy.mdscenarios.mdsolution-overview.mdreferences/scenarios/failure-modes.mdintra-solution-references.mdmanual-edits.mdsame-name-across-folders.mdshared-cloud-resource.mdvirtual-resource.md详细介绍
UiPath Solution — uip solution 生命周期
通过 uip solution CLI 界面创建、打包、发布、部署和管理 UiPath Solution 包(.uipx)。一个 Solution 会将多个自动化项目(流程、测试、Agent 项目、API 工作流)打包成一个可部署单元。库不属于其中之一——它会单独发布,至多声明为 Library 资源(开发 Solution § 步骤 2)。
使用 CLI。不要自行编写 Solution 操作的 REST 请求。 手动编写 HTTP 调用会遗漏
X-UIPATH-OrganizationUnitId文件夹请求头、OData 筛选器格式、分页信封、pipelinesInstall部署语义、重试行为,以及Result/Code/Data输出约定。CLI 是事实来源。
平台支持。 Solutions 可在 Automation Cloud 和自托管 Automation Suite
2.2510.0及更高版本上运行;不支持 Standalone Orchestrator。可用项目类型因 AS 版本而异(Maestro 仅从自托管版本2.2510.2开始支持)。兼容性矩阵和按版本划分的项目类型表 → Solution 概览 — 平台可用性。
何时使用此技能
-
用户有一个
.uipxSolution,想要打包/发布/部署/激活/上传 -
用户想要创建新的 Solution(
uip solution init)、添加或移除项目,或刷新 Solution 资源 -
用户想要处理 Studio Web 中已有的 Solution,或将其移至其他组织或租户——从
uip solution download开始(从现有 Solution 开始) -
用户要求设置 CI/CD 流水线,以构建、发布和部署 UiPath Solution
-
用户提到部署配置、环境晋级或激活已部署的 Solution
-
技能或主 Agent 检测到
.uipx文件并将用户引导至此处
以下情况请跳过此技能:
- 任务是 PDD → SDD 架构/设计(sdd.md / pdd.md)——加载
uipath-planner。 - 可部署对象是单个非 Solution 包(例如一次性 RPA 库或 coded app)——这些对象使用
uip rpa publish/uip codedapp publish,并转至uipath-platform或相应的专用技能。 - 任务是非 Solution 的 Orchestrator 工作(文件夹、作业、资产、队列、IS 连接)——加载
uipath-platform。
CLI 界面探测
在会话中首次运行 uip solution … 命令前,探测 solution 界面,以判断 CLI 使用重命名前还是重命名后的命令:
uip solution init --help --output json
-
结果为
Success→ 使用重命名后的 CLI(默认)。按参考文档使用命令和标志。 -
出现
unknown command/非零退出码 → 使用重命名前的 CLI。每次调用前都按下表转换。如后续出现unknown command错误,请重新探测。 -
出现
command not found/uip: not found/'uip' is not recognized→ 未安装 CLI。告知用户运行官方安装程序(macOS/Linux 上运行curl -fsSL https://download.uipath.com/uipath-cli/install.sh | bash;Windows PowerShell 中运行irm https://download.uipath.com/uipath-cli/install.ps1 | iex),然后运行uip login;在这些步骤成功前中止操作。
| 重命名后(默认) | 重命名前的等效命令 |
|---|---|
uip solution init <NAME> | uip solution new <NAME> |
uip solution deploy run --parent-folder-path <PATH> | uip solution deploy run --folder-path <PATH> |
uip solution deploy run --parent-folder-key <KEY> | uip solution deploy run --folder-key <KEY> |
uip solution projects <VERB> | uip solution project <VERB>(重命名后单数形式仍可用,但已隐藏并弃用) |
uip solution resources <VERB> | uip solution resource <VERB> |
uip solution projects import <PATH> | uip solution project import --source <PATH> |
所有其他 solution 子命令(pack、publish、deploy activate/status/uninstall、upload、resources …、projects add/remove/list)在两个界面中均未更改。
关键规则
- 在会话中首次运行
uip solution命令前,先探测 CLI 命令界面。 运行uip solution init --help --output json。Success= 重命名后的 CLI(默认);unknown command= 重命名前的 CLI——请按照上方的回退表进行转换。之后遇到任何unknown command错误时,都要重新探测。 - 对于需要解析输出的
uip solution命令,始终使用--output json。JSON 格式紧凑且稳定;在非交互式运行中默认使用。 - 始终使用 CLI,绝不要为解决方案操作自行编写 REST 请求。手写 HTTP 调用会遗漏
X-UIPATH-OrganizationUnitId标头、OData 筛选器格式、分页封装,以及pipelinesInstall部署语义。只有在确认没有任何uip solution命令可执行该任务后,才使用 REST。 - 绝不要手动编辑
resources/solution_folder/。它由uip solution projects add/import自动生成,并由projects remove自动清理。手动编辑会导致其与.uipx不同步,并引发静默故障。参见 scenarios/manual-edits.md。 .uipx和resources/solution_folder/中的项目集合必须始终一致。对比二者是检测状态损坏最快的方法。如果二者不一致,请通过uip solution projects add/remove修复,绝不要直接编辑任一侧。- 在执行
pack或upload前运行uip solution resources refresh。打包的工件文件和userProfile/<userId>/debug_overwrites.json必须反映当前云端状态。跳过刷新会导致发布过期的绑定。 - 在解决方案内部创作的 AppV2 编码应用会注册到
.uipx中。uip codedapp init是解决方案端的脚手架入口点,请从**.uipx解决方案内部运行它。它会写入project.uiproj(ProjectType: "AppV2")和webAppManifest.json,将源文件放在source/dist/下,并自动注册为Type: "AppV2",生成resources/solution_folder/app/{Coded,CodedAction}/。uip solution projects add/uip solution projects import也可处理现有的 AppV2 文件夹:二者都会读取webAppManifest.config.isActionApp,以选择Coded/CodedAction子类型(对于没有清单的旧版文件夹,默认为Coded)。uip solution pack会将其打包;uip solution deploy run会对其进行预配。独立编码应用遵循不同的**生命周期:使用npx create-vite@latest(而非uip codedapp init)搭建脚手架,在项目根目录下保留扁平的dist/,并通过uip codedapp pack→uip codedapp publish→uip codedapp deploy进行部署。参见 /uipath:uipath-coded-apps。 - 每次 CLI 修改后都要验证工件。读取
project.json、.uipx或uip solution deploy status的输出,不要轻信退出代码。验证是额外步骤,不能取代用户要求的只读列表命令。如果用户要求显示或列出已注册项目、解决方案资源、软件包、部署或状态,请运行对应的uip solution ... list/status --output json命令,然后仅将检查文件作为次要的健全性检查。 - 处于
Draft状态的部署是失败的部署,不是等待中的部署。验证拒绝了某项资源,安装也未完成;它不会自行推进,也无法激活。查看失败原因:由于每次部署都会等待其运行结果,所有 Feed 上的失败详情中的Instructions都会包含Validation:/Conflicts:;使用deploy config set/link修复后,使用相同的--name和--package-version,通过deploy run --config-file <file>重新运行。草稿存在期间,它会占用该部署:任何其他版本都会被拒绝,包括deploy upgrade,除非通过上述方式完成草稿,或将其丢弃(使用deploy upgrade <draft-key> --discard-draft,或在 Orchestrator 中删除草稿)。若要查看该部署,请使用相同的 Feed 标志运行deploy list;不指定 Feed 时会按租户范围查询,且完全不会显示 Personal Workspace 或文件夹 Feed 的条目。参见 A deploy that stops inDraft。 - 用链接替换已安装资源时,必须获得明确同意。当
deploy run配置文件(deploy config link)或deploy upgrade中的新版本链接了部署已安装的资源时,服务器会删除已安装的副本及其数据。较新的服务器会先询问,而较新的 CLI 版本随后会停止并显示Deploying '<name>' will permanently delete … installed resource(s) replaced by links: <kind> '<name>', …(deploy upgrade时显示Upgrading …;ErrorCode: invalid_argument,这些资源也会出现在Data.PermanentDeletionResources中)。此时没有安装任何内容,且本次尝试会保留为待处理草稿。这不是需要修复的配置错误:只有在用户希望删除这些副本及其数据时才予以确认,然后使用--acknowledge-permanent-deletion重新运行相同的命令;对于deploy upgrade,绝不要同时使用--discard-draft,因为这会丢弃待确认的链接。若要保留副本,请运行deploy config unlink <file> <resource>并重新运行(deploy run),或运行deploy upgrade <draft-key> --discard-draft(deploy upgrade)。--yes不代表此处所需的同意。参见 Replacing an installed resource with a link。 - 绝不要自行在
deploy uninstall中传入--force。它会发送forceUninstall: true,放弃尚未完成的作业,并永久删除被链接替换的已安装资源及其数据(它也会代替--yes)。当卸载失败并显示Message"…this deployment has uncompleted jobs; --force uninstalls anyway" 或 "…permanently deletes these resources and their data: '', …"(Data.JobsNotInFinalState、Data.PermanentDeletionResources、Retry: RetryWillNotFix)时,请向用户说明原因,只有在用户明确接受后才添加--force。若要绕过 "…errors that --force cannot get past"(Retry: RetryLater),绝不要添加它;应在 Orchestrator 中解决该问题,然后不带--force重新运行。参见 When the uninstall is refused。 - 要将部署提升到多个环境,请使用
uip login tenant set <tenant>切换租户,并通过--config-file <path>传入每个环境对应的部署配置。同一个已打包的.uipx可部署到 dev/staging/prod,环境差异由目标租户和配置文件决定(使用deploy config get生成,再通过config set/config link编辑),而不是由不同的软件包决定。没有-c <CONFIG_KEY>标志。
工作流
UiPath 解决方案的典型生命周期:
1. init / project add → Create solution, register projects (.uipx + resources/solution_folder/)
2. resources refresh → Sync bundled artefacts and debug overwrites with cloud state
3. (optional) restore → Resolve NuGet deps in place (incl. authenticated Orchestrator feeds); login first
4. pack → Produce deployable .zip package
5. login → uip login (if not already authenticated)
6. publish → Upload packed solution to UiPath
7. deploy run → Promote to Orchestrator (auto-activates by default)
8. (optional) activate → Use --skip-activate on deploy, then activate explicitly
restore是一种优化手段,并非必需步骤。pack会在内部还原依赖项,因此只有在希望提前解析依赖项时,单独执行restore才有用——最常见的情况是在 CI 中(login → restore → pack),以便在耗时更长的打包开始前,快速发现源中缺少依赖项。restore只接受<solutionPath>(包含.uipx的解决方案目录,或.uis文件),会就地解析依赖项,且不会生成包。要访问私有 Orchestrator 源,它需要经过身份验证的会话,因此请先运行uip login。
解决方案流程中的 AppV2 编码应用通过
uip solution处理,而不是直接使用uip codedapp。 当编码应用项目在.uipx中包含Type: "AppV2"时,uip solution pack会将其.nupkg打包,uip solution deploy run会在部署文件夹中对其进行配置——无需单独执行uip codedapp pack/publish/deploy步骤。独立编码应用(通过npx create-vite在任何解决方案之外创建,项目根目录下有扁平的dist/,且没有project.uiproj/webAppManifest.json)则使用直接的codedapp流程。有关独立应用生命周期,以及如何通过uip codedapp init在解决方案中创作 AppV2 项目,请参阅uipath-coded-apps。
同一源代码的两种不同分发路径:
pack→publish→deploy run— 将带版本号的包发布到 Orchestrator。upload— 将解决方案推送到 Studio Web,仅用于基于浏览器的调试。不会生成已发布的包,也不能通过deploy run进行部署。
身份验证是前提条件。开始任何工作前,请检查 uip login status --output json;如果尚未登录,请让用户运行 uip login(交互式浏览器流程)。有关完整的身份验证选项(交互式 OAuth、客户端凭据、切换租户),请参阅 uipath-platform。
此技能是由 SDD 驱动的构建流程的最后一步:uipath-planner 生成 SDD 并导出任务列表后,实施专家会构建项目,随后在此处打包并交付 .uipx。
从现有解决方案开始
如果解决方案已存在于 Studio Web 中,请下载其源代码,而不是重新创建:
uip solution download <solution-id> --destination <dir> --extract --output json
<solution-id>是 Studio Web 解决方案 GUID。如果用户尚未提供,请向其索取。- 在
Data.ExtractedTo中工作。该目录包含.uipx和项目文件夹。请先阅读其中的AGENTS.md/CLAUDE.md;如果存档中没有这些文件,--extract会添加它们。请解压到新建或空的文件夹中:--extract会覆盖现有文件,因此在已编辑过的副本上重新运行会丢失这些修改。请先与用户确认。 - 解压后的
.uipx会保留 Studio Web 的SolutionId,而uip solution upload会覆盖你当前登录的组织中具有该 ID 的解决方案;如果不存在,则会导入一个新解决方案(开发解决方案 § 上传如何根据云端内容决定导入还是覆盖)。若要将解决方案移至其他组织或租户,请登录该组织或租户后执行upload,或在那里依次执行pack→publish→deploy run。
参考导航
| 文件 | 用途 |
|---|---|
| 解决方案概述 | 什么是解决方案、.uipx 清单、文件结构、生命周期图、命令树 |
| 开发解决方案 | uip solution init / project add / import / remove / resources refresh / resources add / resources remove / resources edit;经过实际验证的注意事项 |
| 打包与部署 | restore / pack / publish / deploy run / feeds list,指定非租户 feed(--feed / --personal-workspace)、部署配置、CI/CD 流水线模式 |
| 激活与管理 | deploy activate / status / upgrade / uninstall / delete、原地版本升级、环境管理 |
| 场景索引 | 失败模式和边缘情况——手动编辑、共享资源、虚拟资源、名称冲突 |
反模式
- 为
pack、publish、deploy run或activate手动编写 REST 调用。uip solutionCLI 能正确处理身份验证、文件夹标头、流水线语义和分页。只有在确认没有命令能完成任务后,才考虑使用 REST。 - 直接编辑
resources/solution_folder/。 此目录会自动生成和清理。手动编辑会导致其与.uipx不同步。请改用uip solution projects add/remove。 - 在
pack或upload前跳过uip solution resources refresh。 这会打包过时的绑定和调试覆盖状态。 - 对已在
.uipx中注册的 AppV2 项目运行uip codedapp pack/publish/deploy。 注册为Type: "AppV2"后,编码应用就属于该解决方案——由uip solution pack/uip solution publish/uip solution deploy run处理。直接运行uip codedapp publish会绕过解决方案的部署配置(外部客户端 ID、路由名称、操作架构),并创建重复注册。只有对使用npx create-vite搭建的独立编码应用,才直接使用uip codedapp(目录树中没有.uipx,也没有project.uiproj/webAppManifest.json)。 - 为每个环境创建新的
.uipx,而不是使用部署配置。 同一个打包后的解决方案可以通过每个环境各自的--config-file部署到开发/预发布/生产环境(并通过uip login tenant set指定目标租户)。为不同环境使用不同的.uipx文件会破坏版本跟踪。 - 将
uip solution upload(Studio Web)用作部署途径。 上传仅用于基于浏览器的调试——它不会生成已发布的包,也无法通过deploy run推广。实际部署请使用pack→publish→deploy run。upload还会将解决方案放入 Studio Web 的 Cloud workspace 选项卡,而非 Local 选项卡;SW 的 Local 选项卡是无法通过uip solution访问的独立注册项。 - 仅凭退出代码判断变更结果。 务必检查产物(
project.json、.uipx、部署状态)——非零退出代码可能表示仅完成了部分操作,而零退出代码也可能掩盖警告。