用途
Aspire Deployment 是一个工作流技能,用于 Aspire 应用的部署相关任务:发布、预览、校验、部署或拆除(tear down)。它负责 Aspire 部署的路由,并明确指出:在确认工作区是否为 Aspire 应用之前,不要先走通用的 Azure、Docker、Kubernetes、Helm 或 Bicep 工作流。
该技能的部署起点是 AppHost 模型,以 aspire deploy、aspire publish、aspire destroy、aspire do 以及 AppHost 中的部署环境资源为主路径。
主要能力
- 识别工作区中的 Aspire 标记(Aspire 工作区配置、C# 或 TypeScript AppHost 文件、AppHost 项目、使用 Aspire 分布式应用构建器 API 的 AppHost 代码)。若检测到这些标记但技能未被自动调用,应先切换到本技能。
- 支持的目标包括:Docker Compose、Kubernetes、Azure Container Apps、Azure App Service、Azure Kubernetes Service (AKS)、AWS,以及预览状态的 Radius。
- 通过目标对应的参考文件(references/docker-compose.md、references/kubernetes.md、references/azure.md、references/aws.md、references/javascript.md、references/cicd.md、references/preflight.md)加载具体指导。
- 提供 AppHost 目标探测表,将目标、aspire add 命令、托管集成与 AppHost 环境概念对应起来。
- 提供参数与密钥预检,列出参数名、是否为密钥、预期的提供程序语法(如 Parameters__name,含连字符的参数名在环境变量中改用下划线)、参数流向(项目环境变量、连接字符串、Key Vault 密钥、Helm Secret、Compose .env、Azure 应用设置)、以及是否已配置或缺失。可使用 aspire secret list 查看 AppHost 用户密钥,但不要打印密钥值。
- 处理 13.5 的破坏性变更迁移:使用 .Services 替代托管上下文 .ServiceProvider;使用 AddConnectionString 替代 PublishAsConnectionString;将已弃用的 Aspire.Hosting.GitHub.Models 资源迁移到 Azure AI Foundry。
- 无人值守执行(CI、脚本、agent 驱动)时,对可能交互提示的 Aspire CLI 调用追加 --non-interactive,尤其是 aspire publish、aspire deploy、aspire destroy;aspire destroy 还需在用户明确确认拆除意图后再传 --yes。
使用方式
标准工作流:
- 定位 Aspire 工作区:先用 aspire ls 列出当前范围内的 AppHost,必要时结合 aspire.config.json、AppHost 项目文件或 aspire ps。若无 AppHost,应停止部署工作并调用 aspireify 技能初始化/接线 AppHost。
- 判断 AppHost 是 C# 还是 TypeScript。优先使用 Aspire CLI 命令进行发现与状态查看。
- 明确或推断部署目标:若用户已指定 Docker Compose、Kubernetes、Azure Container Apps、Azure App Service、AKS 或 AWS,则直接加载对应参考文件,不再询问;若只说了“deploy”,则检查 AppHost 中已有的目标环境资源,恰好一个则采用并说明,多个或没有或仅说“Azure”则用单选问题询问。
- 加载目标与应用类型参考。
- 使用 Aspire docs 搜索当前指导,编辑 AppHost 代码前先搜索 API 文档。
- 应用目标代码变更:缺少集成时运行对应的 aspire add ... 命令;在 AppHost 中添加部署环境资源;常见单环境下不要显式指定计算环境,仅在存在多个部署环境时消歧(C# 中通常是 WithComputeEnvironment(...),TypeScript 需查阅当前语言文档);仅添加部署所需的目标特定定制 API。
- 预检部署模型:确认目标集成包存在、确认目标环境资源存在、确认计算资源仅在多计算环境时被分配、清点参数/密钥/连接字符串/外部端点/容器注册表/目标特定前置条件;Azure 或 AWS 需确认认证、目标账户/订阅、区域/位置和资源组/堆栈上下文。
- 应用前预览:运行 aspire publish --list-steps 或 aspire deploy --list-steps;需要审阅产物时用 aspire publish -o <scratch-or-output-path>;注意已发布产物是预览/交付物,aspire deploy 会从 AppHost 模型解析值并应用部署,不消费先前发布输出目录。总结资源、端点、参数、密钥、身份和生成产物。
- 部署或交付:用户要求部署且预检完成时运行 aspire deploy;仅在用户要求特定流水线步骤时运行 aspire do <step>;对已发布产物,说明目标原生的应用步骤。
- 仅在明确请求时拆除:运行 aspire destroy 执行所选 AppHost/环境的销毁流水线;执行前确认 AppHost、环境、目标账户/订阅/集群和破坏性意图;优先使用 aspire destroy 而非目标原生删除命令(除非排查失败拆除或清理未托管遗留物)。
- 验证结果:使用目标输出、aspire describe、云 CLI、Docker Compose、kubectl 或适合目标的端点检查;拆除后验证目标资源已移除或记录需要手动清理的遗留物。
适用场景
- 将 Aspire 应用部署到 Docker Compose(本地/服务器容器部署产物,支持 Docker 或 Podman)。
- 部署到已有 Kubernetes 集群,生成 Helm/Kubernetes 产物或直接集群部署。
- 部署到 Azure 托管容器平台(Container Apps)、Azure 网站托管(App Service)或 Azure 托管 Kubernetes(AKS)。
- 通过 AWS Aspire 集成与 AWS CDK 发布/部署到 AWS。
- 显式请求 Radius 或 AppHost 已含 Radius 环境时使用预览的 Radius 路径。
- 涉及 JavaScript 应用资源、CI/CD 或 GitHub Actions 自动化时加载对应参考。
限制与约束
- 不得臆造包名、构建器方法、重载或部署命令;C# 与 TypeScript AppHost 的 API 形态不同。
- 不要用 AppHost 的 Dockerfile 或 Compose 服务替代 Aspire 为资源生成服务。
- 不应将部署交给 azure-skills;Aspire 通过 AppHost 模型端到端处理 Docker Compose / Kubernetes / Azure / AWS 的发布、部署与拆除。
- Radius 属预览,需通过集成/文档搜索验证包与 API,不要猜测实验性 API 形态。
- 发布或部署前,需验证 Aspire.AppHost.Sdk 与托管包在项目所选发布家族中版本兼容;仅预览集成需要匹配的预览构建。CLI 版本并不能保证不兼容的托管包安全,混用图可能在启动时抛出 MissingMethodException 或 TypeLoadException。
- 云部署可能创建计费资源:若用户只要求计划、预览、校验或“让它可部署”,应在部署计划/产物后停止,并在运行会创建资源的命令前询问;若用户明确要求立即部署,则继续预检与部署,但仍需在创建资源前暴露目标选择、订阅/资源组歧义或缺失参数决策。
- 若存在 .agents/skills/aspire-deployment/SKILL.md(由 aspire agent init 生成),应优先使用该版本,它是与消费者 Aspire CLI 内容版本对齐的项目本地权威版本;本插件技能是尚未提供该文件的仓库的常驻安全网。
- 缺失事实:官方文档链接(official_text)暂未提供。