- 新增 PARENT_VERSION_NUMBER 可选配置,默认空值不传 - create-download-task 非空时透传 parentVersionNumber - 支持 LLM/规则从自然语言和 key=value 中抽取继承版本参数 - 将 rollback 接口参数从表单 body 改为 URL query 拼接 - 同步 README、打包说明和 Skill 文档 - 增加 MCP 参数透传、配置写入和 rollback query 调用测试
34 KiB
34 KiB
name, description
| name | description |
|---|---|
| pam-auto-deply | 面向 PAM HOME/NODE 的智能部署 Skill。由 Skill 负责理解用户需求、收集并确认参数、选择执行模式、编排主流程、控制进度查询与最终汇总;由现有 deploy.sh / deploy.ps1 提供 action 能力执行建版、上传、发布、节点发现、云下载、升级、启停、校验、日志下载和手动回滚。禁止自动生成或修改脚本,禁止使用脚本主流程做部署。 |
PAM_AUTO_DEPLY Skill
1. Skill 定位
本 Skill 面向 PAM 软件发布、下载、升级、校验、日志采集和回滚场景。
职责划分如下:
Skill负责主流程编排。Agent负责理解用户意图、补齐参数、按步骤调用脚本 action、控制高风险交互。deploy.sh/deploy.ps1负责执行具体动作。
默认原则:
- 只允许由 Skill 编排,逐步调用脚本
action入口。 - 禁止使用脚本主流程做部署,包括
bash ./deploy.sh --config ...和powershell -File .\deploy.ps1 -ConfigPath ...这类整条执行方式。 - 禁止自动生成、重建、覆盖或修改
deploy.sh、deploy.ps1、deploy.bat、test_deploy.sh、test_deploy.ps1、test_deploy.bat。 - 在任何真实调用前,必须先向用户展示归一化后的参数并得到确认。
- 在真实部署执行过程中,必须持续向用户展示当前阶段、下一步动作和阶段结果,禁止长时间静默执行。
- 回滚不得自动执行;主 workflow 失败后只暂停在当前 action。需要回滚时,必须由用户显式输入
rollback [IP]或直接调用rollback-ipaction。
2. 执行模式选择
2.1 模式判定
先识别用户期望的入口:
- 用户明确说“用 MCP”“直接在线执行”“不要生成脚本”:使用
MCP。 - 用户明确说“用脚本”“离线执行”:使用
API脚本。 - 用户只说“帮我部署”,且当前环境存在可用 MCP:优先
MCP。 - 用户只说“给我脚本”“生成脚本”“输出 sh / ps1 / bat / config”:直接说明本 Skill 禁止自动生成或修改脚本文件;如需仅提供现有脚本使用方式,可切到
API脚本说明模式,但不执行真实部署。 - 用户只说“不要直接动环境”:优先
API脚本,但仅允许说明现有脚本调用方式,不自动产出脚本。
2.2 脚本模式优先级
在 API脚本 模式下,优先使用真实脚本文件:
- Linux / macOS / Git Bash:
deploy.sh - Windows:
deploy.ps1 deploy.bat仅作为兼容入口,不作为默认主入口
硬约束:
- 只允许调用当前目录中已经存在的真实脚本文件。
- 禁止根据参考文档自动生成脚本。
- 禁止为适配当前任务而自动修改脚本实现。
- 如果目标脚本文件缺失、损坏或能力不足,必须停止并向用户说明,不得自行补写脚本。
3. 输入参数规范
3.1 必填业务参数
| 规范字段 | 脚本字段 | 必填 | 说明 |
|---|---|---|---|
HOME_BASE_URL |
HOME_BASE_URL |
是 | PAM HOME 基础地址 |
client_id |
CLIENT_ID |
是 | OAuth 客户端 ID |
client_secret |
CLIENT_SECRET |
是 | OAuth 客户端密钥 |
airportCode |
AIRPORT_CODE |
是 | 机场三字码 |
applicationName |
APP_NAME |
是 | 应用名 |
moduleName |
MODULE_NAME |
是 | 模块名 |
versionNumber |
VERSION_NUMBER |
是 | 目标版本号 |
zipFilePath |
ZIP_FILE_PATH |
是 | 本地软件包路径 |
actionType |
ACTION_TYPE |
否 | 升级类型,默认 FULL |
timeOut |
TIMEOUT |
否 | 接口级超时参数,默认 120 |
logName |
LOG_NAME |
否 | 日志文件名,默认 app.log |
parentVersionNumber |
PARENT_VERSION_NUMBER |
否 | 云下载时指定继承哪个版本的规则;默认空值不传,继承正在使用的版本规则 |
pollIntervalSec |
POLL_INTERVAL_SEC |
否 | 两次进度查询间隔,默认 2 秒 |
downloadPollMaxAttempts |
DOWNLOAD_POLL_MAX_ATTEMPTS |
否 | 云下载进度最大查询次数,默认 60 |
upgradePollMaxAttempts |
UPGRADE_POLL_MAX_ATTEMPTS |
否 | 单 IP 推送进度最大查询次数,默认 600 |
verifyIntervalSec |
VERIFY_INTERVAL_SEC |
否 | verify-ip 健康检查失败后的重试间隔,默认 10 秒 |
verifyMaxAttempts |
VERIFY_MAX_ATTEMPTS |
否 | verify-ip 健康检查最大尝试次数,默认 12 |
3.2 运行控制参数
以下参数不一定写入 config.txt,但 Skill 需要掌握:
mode:MCP或API脚本showUsageOnly: 是否只说明现有脚本用法而不执行userSpecifiedIps: 用户指定的目标 IP 子集allOrNothing: 是否要求全有或全无rollbackApproved: 用户是否已明确要求执行回滚osTarget: 目标脚本入口环境checkpointPath: 检查点文件路径resumeFromCheckpoint: 是否按已有检查点断点续试traceFilePath: 当前部署统一复用的接口跟踪日志文件路径stepIntervalSec: 全局 action 与 action 之间的执行间隔perIpStepIntervalSec: 同一台 IP 内部步骤之间的执行间隔perIpIntervalSec: 一台 IP 完成后到下一台 IP 开始前的间隔failurePauseSec: 某步骤失败后进入下一分支前的等待间隔
推荐默认值:
stepIntervalSec = 2perIpStepIntervalSec = 1perIpIntervalSec = 3failurePauseSec = 0
3.3 参数确认要求
在执行任何真实动作前,Agent 必须先输出一份“归一化参数确认单”,至少包含:
- 模式:
MCP或API脚本 - 脚本入口:
deploy.sh或deploy.ps1 HOME_BASE_URLairportCodeapplicationNamemoduleNameversionNumberzipFilePathactionTypetimeOutlogNameparentVersionNumber(可选;空值表示不传)- 用户指定 IP 子集(如有)
确认规则:
- 未确认,不执行任何真实
action - 参数有歧义,先追问,不猜测
- 敏感字段如
client_secret不明文回显,可显示为已提供/未提供
参数确认单建议模板:
## 部署参数确认单
- 模式: API脚本
- 脚本入口: deploy.sh
- HOME_BASE_URL: https://pam.home.example.com
- AIRPORT_CODE: HET
- APP_NAME: PAM
- MODULE_NAME: Node
- VERSION_NUMBER: 2.0.5
- ZIP_FILE_PATH: /data/pkg/pam-2.0.5.zip
- ACTION_TYPE: FULL
- TIMEOUT: 120
- LOG_NAME: app.log
- PARENT_VERSION_NUMBER: -
- 指定IP: 192.168.1.10, 192.168.1.11
- CLIENT_ID: 已提供
- CLIENT_SECRET: 已提供
请确认以上参数是否正确。未确认前不会执行真实部署。
3.4 参数落地规则
参数确认完成后,Agent 应先将业务参数写入 config.txt,再调用脚本 action。
规则如下:
config.txt承载稳定业务参数:HOME_BASE_URLCLIENT_IDCLIENT_SECRETAIRPORT_CODEAPP_NAMEMODULE_NAMEVERSION_NUMBERZIP_FILE_PATHACTION_TYPETIMEOUTLOG_NAMEPARENT_VERSION_NUMBERPOLL_INTERVAL_SECDOWNLOAD_POLL_MAX_ATTEMPTSUPGRADE_POLL_MAX_ATTEMPTSVERIFY_INTERVAL_SECVERIFY_MAX_ATTEMPTS
- 命令行只传 action 级控制参数:
--action/-Action--ip/-Ip--hash-code/-HashCode--stop-first/-RollbackStopFirst
- 不要把整套业务参数直接拼接到命令行。
client_secret等敏感字段不得通过命令行透传。- 如果用户明确要求“不落地配置文件”,则本 Skill 不执行真实部署,只说明限制和原因。
traceFilePath不写入config.txt,由 Agent 在运行时持有并应用。PARENT_VERSION_NUMBER写入config.txt但默认可为空;只有非空时,create-download-task才把它作为云下载接口参数parentVersionNumber发送。- 进度查询和健康检查重试参数写入
config.txt,由 Agent workflow 和脚本调试流程共同读取。
4. 主流程(硬约束)
4.1 正式部署主流程
在 API脚本 模式下,真实部署必须严格按以下顺序执行:
- 读取用户输入并识别本次意图是否为真实部署。
- 归一化业务参数与控制参数。
- 输出参数确认单,并等待用户确认。
- 检查现有脚本文件是否存在且可用:
deploy.shdeploy.ps1
- 选择脚本入口:
- Linux / macOS / Git Bash 用
deploy.sh - Windows 用
deploy.ps1
- Linux / macOS / Git Bash 用
- 将确认后的业务参数写入
config.txt。 - 调用
get-token。 - 调用
create-version。 - 调用
upload-package。 - 调用
publish-version。 - 调用
get-node-url。 - 调用
get-online-ips。 - 若用户指定了目标 IP,则基于在线 IP 列表做过滤。
- 调用
create-download-task;如PARENT_VERSION_NUMBER非空,则云下载接口携带parentVersionNumber,否则不传该参数。 - 重复调用
poll-download-progress单次查询进度;每次返回后交给 LLM/规则判断,直到下载完成、失败或达到最大查询次数。 - 按在线 IP 或过滤后的目标 IP 列表逐台执行:
upgrade-ip- 重复调用
poll-upgrade-progress单次查询进度;每次返回后交给 LLM/规则判断,直到推送完成、失败或达到最大查询次数 start-ip- 重复调用
verify-ip健康检查;SUCCESS=false时按VERIFY_INTERVAL_SEC等待后重试,直到成功或达到VERIFY_MAX_ATTEMPTS download-log
- 汇总每台 IP 的结果。
- 若 action 失败、LLM/规则审核要求停止,或出现 legacy
PENDING_AGENT_CONFIRMATION(...),暂停在当前 action 并输出建议。 - 输出最终报告;需要回滚时,等待用户显式执行
rollback [IP]。
主流程补充规则:
- 一次完整部署中的所有 action 调用,应复用同一个
traceFilePath,禁止每个 action 各自新建独立 trace 文件。 - 全局 action 与下一 action 之间,按
stepIntervalSec等待。 create-download-task成功后,直接进入poll-download-progress;未完成时按POLL_INTERVAL_SEC等待后再次查询当前 action。PARENT_VERSION_NUMBER只影响create-download-task/download-cloud,不得透传到推送、启动、校验或日志下载 action。- 同一台 IP 内部:
upgrade-ip -> poll-upgrade-progresspoll-upgrade-progress -> start-ipstart-ip -> verify-ipverify-ip -> download-log之间按perIpStepIntervalSec等待。
- 当前一台 IP 处理完成后,到下一台 IP 开始前,按
perIpIntervalSec等待。 - 若某步骤失败后需要进入提示、确认或分支流程,可按
failurePauseSec等待。 - 若某个间隔值为
0,表示该层级不等待,直接进入下一动作。 poll-download-progress和poll-upgrade-progress的脚本 action 只执行一次进度查询;正式 workflow 的循环、checkpoint、LLM 判断和进度播报由 Agent Runtime 负责。verify-ip失败但未达到VERIFY_MAX_ATTEMPTS时,不进入download-log,也不把当前 action 记为 completed;正式 workflow 会播报健康检查进度、保存 checkpoint,并按VERIFY_INTERVAL_SEC重试当前 action。
4.2 主流程中的强制确认点
以下节点必须等待用户确认,不能自动越过:
- 参数确认单确认前。
- 执行
rollback [IP]或rollback-ip前。 - 用户指定 IP 与在线 IP 过滤结果不一致,且会影响部署范围时。
- 用户显式要求修改默认间隔策略时。
4.3 面向用户的流程播报要求
真实部署过程中,Agent 必须把部署过程显式展示给用户,至少满足以下要求:
- 在开始执行任何真实
action前,先输出本次部署阶段列表。 - 在每个全局步骤开始前,告知用户“当前步骤”和“下一步将做什么”。
- 在每个全局步骤成功后,告知用户该步骤已完成,并说明关键结果。
- 在每个全局步骤失败后,立即告知用户失败阶段、失败原因和后续处理。
- 在逐台 IP 处理时,必须告知当前正在处理哪一台 IP。
- 在云下载和单 IP 推送进度查询阶段,每次
poll-*返回后都必须汇报当前进度,不能静默等待完成。 - 在
verify-ip健康检查阶段,每次未通过都必须播报当前检查次数、最大次数和返回信息,不能静默等待应用启动。 - 若执行耗时较长,必须按阶段持续播报,不能等全部结束后一次性汇总。
- 若失败后建议回滚,必须明确告诉用户:
- 哪一台 IP 失败
- 失败阶段
- 建议是否回滚
- 是否需要
stopFirst
- 若当前处于 action 间隔等待中,也必须告诉用户等待时长和下一步动作。
建议的阶段播报格式:
## 当前部署进度
- 当前阶段: create-version
- 下一步: upload-package
- 当前结果: 成功
- 等待: 2 秒后继续
逐 IP 播报格式:
## 当前 IP 处理进度
- 目标IP: 192.168.1.10
- 当前阶段: verify-ip
- 当前结果: 进行中
- 下一步: download-log
- 等待: 1 秒后继续
云下载进度播报格式:
## 云下载进度
- 当前阶段: poll-download-progress
- step: DONE
- msg: success
- rateOfProgress: 100
4.4 检查点与断点续试
正式部署必须记录步骤检查点,以便后续失败时从断点续试,而不是默认从头重跑。
检查点规则:
- 从参数确认通过后开始建立检查点。
- 每个关键步骤成功后,立即更新检查点。
- 检查点必须落地到文件,不只保存在对话上下文里。
- 断点续试时,必须先读取检查点,再决定从哪一步继续。
- 若当前请求参数与检查点中的核心参数不一致,禁止直接续试,必须先让用户确认是否重新开始。
建议的检查点文件:
./logs/deploy_checkpoint_<airportCode>_<applicationName>_<moduleName>_<versionNumber>.json
检查点至少包含以下内容:
- 参数快照:
HOME_BASE_URLAIRPORT_CODEAPP_NAMEMODULE_NAMEVERSION_NUMBERZIP_FILE_PATHACTION_TYPELOG_NAME
- 当前脚本入口:
deploy.sh或deploy.ps1
- 已完成的全局步骤列表:
get-tokencreate-versionupload-packagepublish-versionget-node-urlget-online-ipscreate-download-taskpoll-download-progress
- 关键中间结果:
hashCodenodeUrl- 在线 IP 列表
- 过滤后的目标 IP 列表
- 每台 IP 的执行状态:
upgrade-ippoll-upgrade-progressstartverifydownload-logrollback-statuslog-file
- 最后成功步骤
- 最后失败步骤
- 最后更新时间
断点续试规则:
- 若
get-token之前失败:- 直接从
get-token重试
- 直接从
- 若
create-version、upload-package、publish-version已成功:- 默认不重复执行这些步骤
- 除非用户明确要求“重新开始”
- 若
create-download-task已成功但进度轮询失败:- 默认从
poll-download-progress继续 - 不重新创建下载任务
- 默认从
- 若部分 IP 已成功完成:
- 默认跳过成功 IP
- 只继续未完成或失败的 IP
- 若存在失败暂停或 legacy
PENDING_AGENT_CONFIRMATION(...):- 检查点中必须保留失败阶段、失败原因和审核建议
- 修复后
resume默认从当前失败 action 重试 - 需要回滚时必须由用户显式执行
rollback [IP]
- 若用户要求“从头重新开始”:
- 先明确说明将忽略现有检查点
- 再从第 1 步重新执行
检查点 JSON 建议模板:
{
"mode": "API脚本",
"scriptEntry": "deploy.sh",
"checkpointPath": "./logs/deploy_checkpoint_HET_PAM_Node_2.0.5.json",
"resumeFromCheckpoint": true,
"params": {
"HOME_BASE_URL": "https://pam.home.example.com",
"AIRPORT_CODE": "HET",
"APP_NAME": "PAM",
"MODULE_NAME": "Node",
"VERSION_NUMBER": "2.0.5",
"ZIP_FILE_PATH": "/data/pkg/pam-2.0.5.zip",
"ACTION_TYPE": "FULL",
"LOG_NAME": "app.log"
},
"artifacts": {
"configPath": "./config.txt",
"hashCode": "43858bcf",
"nodeUrl": "https://pam-node.example.com"
},
"onlineIps": [
"192.168.1.10",
"192.168.1.11"
],
"targetIps": [
"192.168.1.10"
],
"completedGlobalSteps": [
"get-token",
"create-version",
"upload-package",
"publish-version",
"get-node-url",
"get-online-ips",
"create-download-task"
],
"ipStates": {
"192.168.1.10": {
"upgrade": "SUCCESS",
"start": "SUCCESS",
"verify": "PENDING",
"download-log": "PENDING",
"rollback-status": "ROLLBACK_NOT_RUN",
"log-file": ""
}
},
"lastSuccessStep": "create-download-task",
"lastFailedStep": "poll-download-progress",
"pendingConfirmation": "",
"updatedAt": "2026-05-21 10:30:00"
}
4.5 主流程逐步说明
| 步骤 | 目标 | 调用或动作 | 成功判定 | 失败处理 |
|---|---|---|---|---|
| 1 | 识别意图 | 判断是否为真实部署 | 意图明确为真实部署 | 若不是,转入分支流程,不执行真实部署 |
| 2 | 归一化参数 | 整理用户输入、补齐默认值 | 参数结构完整 | 参数不清时先追问,不猜测 |
| 3 | 参数确认 | 输出参数确认单 | 用户明确确认 | 未确认前停止 |
| 4 | 检查脚本 | 检查 deploy.sh / deploy.ps1 是否存在且可用 |
至少存在一个与当前 OS 对应的脚本入口 | 缺失或不可用时停止并说明 |
| 5 | 选择入口 | 根据 OS 选择 deploy.sh 或 deploy.ps1 |
入口唯一且明确 | 入口不明确时停止 |
| 6 | 落地配置 | 将稳定业务参数写入 config.txt |
config.txt 已生成且内容与确认单一致 |
写入失败则停止 |
| 7 | 获取 Token | get-token |
返回 TOKEN=... 且非空 |
停止并报告 TOKEN 阶段失败 |
| 8 | 创建版本 | create-version |
返回 RESULT=OK |
停止并报告 CREATE_VERSION 失败 |
| 9 | 上传软件包 | upload-package |
返回 HASH_CODE=... 且非空 |
停止并报告 UPLOAD_PACKAGE 失败 |
| 10 | 发布版本 | publish-version --hash-code ... |
返回 RESULT=OK |
停止并报告 PUBLISH_VERSION 失败 |
| 11 | 获取 Node | get-node-url |
返回 NODE_URL=... 且非空 |
停止并报告 GET_NODE_URL 失败 |
| 12 | 获取在线 IP | get-online-ips |
返回 COUNT>0 且有 IP=... 行 |
停止并报告 GET_ONLINE_IPS 失败 |
| 13 | 过滤目标 IP | 按用户指定 IP 与在线 IP 交集过滤 | 过滤结果明确 | 过滤后为空时停止;范围变化需确认 |
| 14 | 创建云下载任务 | create-download-task |
返回 RESULT=TASK_CREATED |
停止并报告 CREATE_DOWNLOAD_TASK 失败 |
| 15 | 查询下载进度 | 重复调用单次 poll-download-progress |
LLM/规则判断 progress_complete=true;或 STEP=DONE / MSG=success 且 RATE_OF_PROGRESS=100 |
停止并报告 POLL_DOWNLOAD_PROGRESS 失败或超时 |
| 16.1 | 创建单 IP 推送任务 | upgrade-ip --ip ... |
返回 RESULT=TASK_CREATED |
暂停在当前 action,修复后 resume 重试;需要回滚时显式执行 rollback |
| 16.2 | 查询单 IP 推送进度 | 重复调用单次 poll-upgrade-progress --ip ... |
LLM/规则判断 progress_complete=true;或 STEP=DONE / FINISH=true / MSG=success 且 RATE_OF_PROGRESS=100 |
暂停在当前 action,修复后 resume 重试;需要回滚时显式执行 rollback |
| 16.3 | 启动单 IP | start-ip --ip ... |
action 成功返回 | 暂停在当前 action,修复后 resume 重试;需要回滚时显式执行 rollback |
| 16.4 | 校验单 IP | 重复调用单次 verify-ip --ip ... |
返回 SUCCESS=true |
按 VERIFY_INTERVAL_SEC 重试,达到 VERIFY_MAX_ATTEMPTS 后仍失败才暂停在当前 action;需要回滚时显式执行 rollback |
| 16.5 | 下载日志 | download-log --ip ... |
返回 LOG_FILE=... |
记录日志下载失败,但不覆盖原主失败原因 |
| 17 | 汇总结果 | 汇总每台 IP 的阶段、失败原因、回滚状态、日志路径 | 报告内容完整 | 若汇总失败,至少保留原始 action 输出 |
| 18 | 失败暂停或显式回滚 | 失败后默认停在当前 action;用户输入 rollback [IP] 后才执行回滚 |
用户明确要求回滚或修复后 resume |
未显式要求回滚时不自动回滚 |
| 19 | 最终报告 | 输出最终报告 | 报告包含模式、入口、阶段结果、日志、回滚状态 | 不省略失败细节 |
5. 通用执行原则
- 始终通过接口动态获取在线工作站 IP,不要求用户手填
TARGET_IPS。 - 用户若指定部分 IP,必须先查在线 IP,再做过滤。
- 所有关键步骤都要保留原始响应、错误摘要、阶段名。
- 单机成功或失败都要下载对应日志。
- 执行前必须先完成参数确认。
- 每个关键步骤成功后都要刷新检查点。
- 每个关键步骤前后都要向用户播报进度。
- Action 间隔等待也属于需要播报的执行状态,不能静默等待。
- 脚本模式下统一输出流程日志:
[FLOW][START][FLOW][DONE][FLOW][FAIL]
- 只允许调用脚本
action入口,禁止调用脚本主流程。 - 脚本 action 输出以
key=value为主,Agent 应优先读取这些结果行。 - 遇到需要回滚的场景,Agent 只能提示风险和建议;不得自动回滚,必须等待用户显式执行 rollback。
6. 脚本 action 能力
本节仅定义允许调用的入口。除 action 入口外,其他脚本运行方式一律不允许用于真实部署。
6.1 Shell 入口
bash ./deploy.sh --config ./config.txt --action <action-name> [--ip 192.168.1.10] [--hash-code xxx] [--stop-first] [--trace-file ./logs/api_trace_xxx.log]
6.2 PowerShell 入口
powershell -File .\deploy.ps1 -ConfigPath .\config.txt -Action <ActionName> [-Ip 192.168.1.10] [-HashCode xxx] [-RollbackStopFirst]
6.3 可用 action
| action | 用途 | 额外参数 |
|---|---|---|
get-token |
获取访问令牌 | 无 |
create-version |
新建版本记录 | 无 |
upload-package |
上传软件包 | 无 |
publish-version |
发布版本 | --hash-code / -HashCode |
get-node-url |
获取目标 Node 地址 | 无 |
get-online-ips |
获取在线工作站 IP 列表 | 无 |
create-download-task |
创建云下载任务 | 无 |
poll-download-progress |
单次查询下载进度;是否继续查询由 Agent workflow 和 LLM/规则决定 | 无 |
download-cloud-to-node |
创建下载任务并轮询至完成,仅调试使用,不得进入正式主流程 | 无 |
upgrade-ip |
为指定 IP 创建推送任务,固定使用 timeOut=0 |
--ip / -Ip |
poll-upgrade-progress |
单次查询指定 IP 的推送进度;是否继续查询由 Agent workflow 和 LLM/规则决定 | --ip / -Ip |
start-ip |
启动指定 IP 应用 | --ip / -Ip |
stop-ip |
停止指定 IP 应用 | --ip / -Ip |
verify-ip |
校验指定 IP | --ip / -Ip |
download-log |
下载指定 IP 日志压缩包,返回 zip 文件路径 | --ip / -Ip |
rollback-ip |
执行指定 IP 回滚;接口参数使用 URL query,不使用表单 body | --ip / -Ip,可带 --stop-first / -RollbackStopFirst |
6.4 action 输出约定
典型返回为:
ACTION=get-online-ips
COUNT=2
IP=192.168.1.10
IP=192.168.1.11
Agent 读取时:
- 优先解析
key=value - 将
[INFO]、[WARN]、[FLOW]视为辅助日志 - 若 action 失败,以退出码和错误日志为准
- 若返回
TRACE_FILE=...,后续 action 必须继续复用同一个路径
7. 分支流程与禁止事项
7.1 仅说明现有脚本用法分支
当用户意图不是“真实部署”,而是“查看现有脚本如何使用”时:
- 只说明现有
deploy.sh/deploy.ps1/deploy.bat的用途与调用方式。 - 不执行任何真实
action。 - 不生成、不修改任何脚本文件。
- 明确告诉用户当前只是说明模式,不会执行真实部署。
7.2 参数确认后不执行分支
当用户只想确认参数、检查部署计划,但不执行真实部署时:
- 读取并归一化参数。
- 输出参数确认单。
- 说明预计会调用的 action 顺序。
- 若存在旧检查点,可同时说明可从哪个断点恢复。
- 如用户已指定间隔策略,也要一并展示。
- 不执行任何真实
action。 - 不生成、不修改任何脚本文件。
- 明确告诉用户当前只是预演流程,不会执行真实部署。
7.3 仅查看 Node 与在线 IP 分支
当用户只需要确认目标 Node 和在线工作站,而不是正式部署时:
- 读取并归一化参数。
- 输出参数确认单并等待确认。
- 将参数写入
config.txt。 - 初始化或更新检查点文件。
- 初始化或指定统一的
traceFilePath。 - 调用:
get-tokenget-node-urlget-online-ips
- 输出 Node 地址、在线 IP 数量和 IP 列表。
- 若需要间隔等待,也要向用户播报当前等待状态。
- 不执行:
create-versionupload-packagepublish-versioncreate-download-taskupgrade-ip
7.4 显式回滚命令
当用户明确输入 rollback [IP] 或直接要求对指定 IP 回滚时:
- 再次向用户确认目标 IP 和
stopFirst值。 - 调用
rollback-ipaction。 - 如有需要,再调用:
verify-ipdownload-log
- 更新检查点中的
rollback-status。 - 将回滚结果写入最终报告。
- 在回滚执行前后都要向用户播报进度。
7.5 明确禁止的做法
以下做法在本 Skill 中一律禁止:
- 自动生成或修改部署脚本
- 自动生成或修改测试脚本
- 为了方便执行而切换到脚本主流程
- 未确认参数就直接执行真实 action
- 在出现回滚条件时自动执行回滚
- 在已有检查点的情况下,未经判断就从头重跑全部步骤
- 在正式主流程中调用
download-cloud-to-node - 在真实部署过程中长时间静默执行,不向用户播报阶段进度
- 在一轮部署中让不同 action 各自生成不同的 trace 文件
- 擅自忽略用户指定的间隔控制参数
8. 失败处理与回滚
8.1 全局失败
以下步骤失败时,终止整次部署并报告失败阶段:
- 获取 Token
- 建版
- 上传
- 发布
- 获取 Node
- 获取在线 IP
- 创建云下载任务
- 云下载进度轮询失败或超时
8.2 单 IP 失败
单 IP 失败时:
- 必须记录失败阶段和失败原因
- 必须下载该 IP 日志
- 必须刷新该 IP 的检查点状态
- 不得自动执行回滚
8.3 回滚规则
回滚只允许在用户显式要求后执行。
回滚状态包括:
ROLLBACK_NOT_RUNROLLBACK_DONEROLLBACK_FAILEDREJECTED_BY_OPERATOR
默认建议:
- 升级失败:建议回滚,
stopFirst=false - 启动失败:建议回滚,
stopFirst=true - 校验失败:建议回滚,
stopFirst=true
手动回滚命令示例:
bash ./deploy.sh --config ./config.txt --action rollback-ip --ip 192.168.1.10 --stop-first
powershell -File .\deploy.ps1 -ConfigPath .\config.txt -Action rollback-ip -Ip 192.168.1.10 -RollbackStopFirst
9. 输出要求
最终报告至少包含:
- 本次模式:
MCP或API脚本 - 实际入口:
MCP、deploy.sh --action ...或deploy.ps1 -Action ... - 机场、应用、模块、版本
- 在线工作站总数、成功数、失败数
- 每个 IP 的状态、失败阶段、失败原因
- 每个 IP 的回滚状态
- 日志压缩包路径
- 检查点文件路径
- Trace 文件路径
- 当前采用的间隔控制参数
- 是否从断点续试
- 若有 trace,则给出 trace 路径
建议结构:
## PAM 智能部署报告
- 模式: API脚本
- 入口: deploy.sh --action
- 机场: HET
- 应用: PAM
- 模块: Node
- 版本: 2.0.5
- 总工作站数: 3
- 成功: 2
- 失败: 1
- 间隔控制:
- stepIntervalSec: 2
- pollIntervalSec: 2
- downloadPollMaxAttempts: 60
- upgradePollMaxAttempts: 600
- perIpStepIntervalSec: 1
- perIpIntervalSec: 3
- failurePauseSec: 0
- Trace: ./logs/api_trace_HET_PAM_Node_2.0.5.log
| IP | 状态 | 失败阶段 | 回滚状态 | 日志压缩包 |
| --- | --- | --- | --- | --- |
| 192.168.1.10 | SUCCESS | - | - | logs/deploy_192.168.1.10.zip |
| 192.168.1.11 | SUCCESS | - | - | logs/deploy_192.168.1.11.zip |
| 192.168.1.12 | FAILED | VERIFY | ROLLBACK_NOT_RUN | logs/deploy_192.168.1.12.zip |
更完整的最终报告模板:
## PAM 智能部署报告
- 模式: API脚本
- 入口: deploy.sh --action
- 是否断点续试: 是
- 检查点文件: ./logs/deploy_checkpoint_HET_PAM_Node_2.0.5.json
- 机场: HET
- 应用: PAM
- 模块: Node
- 版本: 2.0.5
- 在线工作站总数: 3
- 目标工作站数: 2
- 成功: 1
- 失败: 1
- Trace: ./logs/api_trace_20260521_103000_1234.log
| IP | 状态 | 失败阶段 | 失败原因 | 回滚状态 | 日志 |
| --- | --- | --- | --- | --- | --- |
| 192.168.1.10 | SUCCESS | - | - | - | logs/deploy_192.168.1.10.log |
| 192.168.1.12 | FAILED | VERIFY | Health check failed | ROLLBACK_NOT_RUN | logs/deploy_192.168.1.12.log |
## 检查点摘要
- 最后成功步骤: create-download-task
- 最后失败步骤: poll-download-progress
- 已完成全局步骤:
- get-token
- create-version
- upload-package
- publish-version
- get-node-url
- get-online-ips
- create-download-task
## 后续建议
- 192.168.1.12 停在 verify-ip;修复后可 resume 重试当前 action
- 如确认需要回滚,可执行 rollback 192.168.1.12
10. Agent 执行建议
- 只能调用
action,不要调用脚本主流程。 - 不要自动生成、补写、覆盖或修改脚本文件。
- 在高风险动作前显式说明:
- 会创建版本
- 会上传包
- 会触发升级
- 回滚需要确认
- 参数未确认前,不触发任何真实部署 action。
- 用户只要求“生成脚本不执行”时,由于本 Skill 禁止自动生成或修改脚本,应直接说明限制,而不是自动产出脚本文件。
- 如果 action 输出中出现 legacy
PENDING_AGENT_CONFIRMATION(...),立即暂停当前 workflow,输出建议;需要回滚时等待用户显式执行 rollback。 - 如果存在检查点,优先评估能否从断点续试,而不是默认从头执行。
- 任何长耗时阶段都要主动播报进度,尤其是:
create-download-taskpoll-download-progress- 多 IP 循环处理
- 间隔等待由 Agent 编排层负责控制,不要求脚本 action 自己管理 action 之间的等待。
- 一轮部署中的所有 action,应复用同一个
traceFilePath。