بنقرة واحدة
aether-deploy
生产环境受控部署。从 dev 提升或部署指定版本到生产。 包含镜像验证、配置差异对比、部署确认、健康检查等步骤。 使用场景:"部署到生产"、"发布新版本"、"从 dev 提升到 prod"
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
生产环境受控部署。从 dev 提升或部署指定版本到生产。 包含镜像验证、配置差异对比、部署确认、健康检查等步骤。 使用场景:"部署到生产"、"发布新版本"、"从 dev 提升到 prod"
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
新项目接入 Aether 集群。先分析项目特征生成部署方案,确认后生成部署文件。 两阶段流程:Phase 1 分析与设计 → Phase 2 生成文件。 使用场景:"接入新项目到 Aether"、"生成部署配置"、"初始化 CI/CD"、"规划部署方案"
Aether 集成规范速查 —— 四域 investigation-first hub。消费方项目里临时手写 dev env / 测试配置 / 连接串时的规范速查点 (#185→#186→#241 同根因三次复发的知识层加固)。 回答: "内网服务连接该用 consul 名还是 IP"、"数据库怎么连"、"DATABASE_URL 怎么写"、 "REDIS_URL 怎么写"、"连接串该用 IP 还是 consul"、"连 postgres/redis/内网服务的地址"、 "host volume 该注册几个节点/规范"、"stateful 服务模板规范"、"有状态服务该怎么配"、 "DB 密码该存哪"、"应用 secret 该存哪"、"连接串密码能不能硬编码进 HCL"。 使用场景: "Aether 集成规范速查"、"consul 名还是 IP"、"内网服务怎么连"、"数据库怎么连"、 "DATABASE_URL 怎么写"、"REDIS_URL 怎么写"、"连接串用 IP 还是 consul"、"连 postgres/redis 地址"、"host volume 该注册几个节点"、"volume 规范"、"stateful 服务模板规范"、"有状态服务 该怎么配"、"DB 密码该存哪"、"应用 secret 该存哪"、"连接串密码能不能硬编码进 HCL"
Aether 环境下 Forgejo 凭据的决策 / 诊断 / 轮换指南。回答"该用哪个 token"、 拆解人机两账号模型 (simonfish 人 / 10cg-ci-bot 机)、辨别 CF Access 与 forgejo PAT 两个凭据平面、诊断误导性 403 ("Only signed in user")、安全轮换 (先枚举全部 store)、 凭据卫生红线。深度内容指向 docs/guides/forgejo-token-map.md + .aether/pat-inventory.yaml。 使用场景: "该用哪个 forgejo token"、"which forgejo token"、"forgejo 401"、 "forgejo 403"、"Only signed in user"、"docker login forgejo"、"CF Access 403"、 "token rotation"、"凭据轮换"、"FORGEJO_TOKEN"、"forgejo credential"、 "人机账号"、"registry pull 401"、"docker push unauthorized"
管理 Nomad 节点的 host volume 配置。支持创建、列出、删除 volume。 使用场景:"配置 volume"、"创建 host volume"、"删除 volume"、"查看 volume"
Aether 集群上 owner-triggered 一次性 build container 原语 (walking skeleton, #27). 把本地 git ref 的 tracked 树打包送上 heavy 节点宿主 docker, build + push 到内网 registry, 返回 immutable image_sha256 契约。无 CLI 子命令、无版本 bump、零 Go 代码。 使用场景: "build 镜像", "build aria-runner", "构建容器镜像", "build container", "把 Dockerfile 推到 registry", "image build", "用 Aether 跑 build", "10CG 项目 build image", "首次镜像构建", "无 CI 触发的镜像 build"
向 Aether 维护团队报告 Bug 或提交功能建议。自动收集环境信息, 自动路由到 Forgejo(内部用户)或 GitHub(外部用户)。 使用场景:"报告 bug"、"report an issue"、"提交功能建议"、 "aether 有个问题想反馈"、"feature request"、"提 issue"、 "反馈问题"、"report bug to aether"
| name | aether-deploy |
| description | 生产环境受控部署。从 dev 提升或部署指定版本到生产。 包含镜像验证、配置差异对比、部署确认、健康检查等步骤。 使用场景:"部署到生产"、"发布新版本"、"从 dev 提升到 prod" |
| argument-hint | <service> <version> |
| disable-model-invocation | false |
| user-invocable | true |
| allowed-tools | Bash, AskUserQuestion |
| dependencies | {"cli":{"required":true,"min_version":"0.7.0"}} |
版本: 0.4.0 | 更新: 2026-03-19 | 优先级: P1
⚠️ 此 Skill 需要 aether CLI
# 使用共享检测脚本
source "${CLAUDE_PLUGIN_ROOT}/scripts/cli-functions.sh"
require_aether_cli || exit 1
# 获取 CLI 路径
CLI=$(get_aether_cli)
/aether:rollback/aether:deploy my-project v1.2.3
提取:
my-projectv1.2.3镜像验证是部署安全门控,不可跳过。提供两种验证方式,按优先级尝试:
Primary: docker CLI
IMAGE="forgejo.10cg.pub/org/my-project:v1.2.3"
docker manifest inspect ${IMAGE}
Fallback: Registry v2 API (docker CLI 不可用时)
REGISTRY="forgejo.10cg.pub"
REPO="org/my-project"
TAG="v1.2.3"
curl -sf "https://${REGISTRY}/v2/${REPO}/manifests/${TAG}" \
-H "Accept: application/vnd.docker.distribution.manifest.v2+json"
如需认证,先获取 token:
TOKEN=$(curl -sf "https://${REGISTRY}/v2/token?scope=repository:${REPO}:pull" | jq -r '.token')
curl -sf "https://${REGISTRY}/v2/${REPO}/manifests/${TAG}" \
-H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
-H "Authorization: Bearer ${TOKEN}"
两种方式都失败时,必须 BLOCK 部署,不允许跳过。
当镜像验证失败时,不要仅报错终止 — 引导用户排查根因:
CI Pipeline 状态: 构建是否成功完成?
# 检查最近的 CI 构建状态 (Forgejo Actions)
curl -sf "https://${REGISTRY}/api/v1/repos/${REPO}/actions/runs?limit=5" \
-H "Authorization: token ${FORGEJO_TOKEN}" | jq '.[0] | {status, conclusion, created_at}'
Registry 认证: Token/凭据是否有效?
# 验证 registry 连通性
curl -sf "https://${REGISTRY}/v2/" && echo "Registry reachable" || echo "Registry unreachable"
网络问题: Cloudflare Access、代理、防火墙是否阻断?
诊断完成后,向用户报告根因并建议修复方案,不要跳过验证直接部署。
# 当前运行版本
curl -s "${NOMAD_ADDR}/v1/job/my-project" | jq -r '.TaskGroups[0].Tasks[0].Config.image'
输出:
部署确认
========
服务: my-project
当前版本: v1.2.2 (abc123)
目标版本: v1.2.3 (def456)
变更内容:
- 镜像: forgejo.10cg.pub/org/my-project:v1.2.2 → v1.2.3
确认部署到生产环境? [y/N]
使用 AskUserQuestion 获取确认。
# 更新 Job 镜像
# 方式 1: 修改 Job spec 并提交
# 方式 2: 使用 Nomad API 直接更新
curl -s -X POST "${NOMAD_ADDR}/v1/jobs" \
-d @<(cat deploy/nomad.hcl | sed "s|__IMAGE__|${IMAGE}|g" | nomad job run -output -)
# 轮询检查部署状态
while true; do
STATUS=$(curl -s "${NOMAD_ADDR}/v1/job/my-project/allocations" | jq '[.[] | select(.ClientStatus == "running")] | length')
if [ "$STATUS" -eq "$REPLICAS" ]; then
break
fi
sleep 5
done
# 检查 Consul 健康
curl -s "${CONSUL_HTTP_ADDR}/v1/health/service/my-project?passing" | jq 'length'
部署成功
========
服务: my-project
版本: v1.2.3
实例: 2/2 running
健康检查: all passing
Consul DNS: my-project.service.consul
latest 标签/aether:rollback执行前需要配置 Aether 集群入口,参考 /aether:setup。
# 1. 检查项目配置
if [ -f ".aether/config.yaml" ]; then
NOMAD_ADDR=$(yq '.cluster.nomad_addr' .aether/config.yaml)
CONSUL_HTTP_ADDR=$(yq '.cluster.consul_addr' .aether/config.yaml)
AETHER_REGISTRY=$(yq '.cluster.registry' .aether/config.yaml)
fi
# 2. 检查全局配置 (项目配置优先)
if [ -z "$NOMAD_ADDR" ] && [ -f "$HOME/.aether/config.yaml" ]; then
NOMAD_ADDR=$(yq '.cluster.nomad_addr' ~/.aether/config.yaml)
CONSUL_HTTP_ADDR=$(yq '.cluster.consul_addr' ~/.aether/config.yaml)
AETHER_REGISTRY=$(yq '.cluster.registry' ~/.aether/config.yaml)
fi
# 3. 未配置则提示
if [ -z "$NOMAD_ADDR" ]; then
echo "请先运行 /aether:setup 配置集群"
exit 1
fi