SuperAPI AI 工具集

deploy-pipeline

部署与运维

查看项目

更新于 10-15 11:56

技能介绍

Deploy Pipeline(Stripe / Supabase / Vercel)是一个通过 Composio CLI 在命令行中协调 Stripe、Supabase 和 Vercel 分阶段发布的技能。它用一个脚本启动整个“发布”序列:产品/价格更新、数据库迁移、前端部署、冒烟检查、变更日志发布。

用途

该技能用于需要同时触及计费、数据库和前端的全栈产品发布场景,包括:

  • 全栈产品发布,同时涉及计费、数据库和前端。
  • 将 Vercel 预览构建提升到生产环境,同时切换 Stripe 价格并应用 Supabase 迁移。
  • 每周重复相同序列的发布列车,希望流程可靠。

前置条件

需要先安装并登录 Composio CLI,并链接相关服务:

curl -fsSL https://composio.dev/install | bash
composio login
composio link stripe
composio link supabase
composio link vercel
composio link slack        # for release announcements

发现工具

可通过以下命令搜索和列出可用工具:

composio search "create price" --toolkits stripe
composio search "apply migration" --toolkits supabase
composio search "create deployment" --toolkits vercel
composio tools list stripe
composio tools list supabase
composio tools list vercel

常见 slug(需用 --get-schema 验证):

Stripe:

  • STRIPE_CREATE_PRODUCT
  • STRIPE_CREATE_PRICE
  • STRIPE_UPDATE_PRODUCT
  • STRIPE_LIST_PRICES

Supabase:

  • SUPABASE_LIST_PROJECTS
  • SUPABASE_RUN_SQL_QUERY
  • SUPABASE_LIST_MIGRATIONS
  • SUPABASE_APPLY_MIGRATION

Vercel:

  • VERCEL_CREATE_A_NEW_DEPLOYMENT
  • VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL
  • VERCEL_LIST_DEPLOYMENTS
  • VERCEL_PROMOTE_DEPLOYMENT

流水线

顺序很重要:Stripe → Supabase → Vercel → 验证 → 公告。计费变更先于数据库,数据库先于前端。

1. Stripe:创建或更新价格

composio execute STRIPE_CREATE_PRICE -d '{
  "product":"prod_abc123",
  "unit_amount":2900,
  "currency":"usd",
  "recurring":{"interval":"month"},
  "lookup_key":"team-plan-v2"
}'

2. Supabase:应用迁移

composio execute SUPABASE_APPLY_MIGRATION -d '{
  "project_id":"abcxyz",
  "name":"add_team_tier_column",
  "query":"alter table teams add column tier text default '\''free'\'';"
}'

之后对 schema 做健全性检查:

composio execute SUPABASE_RUN_SQL_QUERY -d '{
  "project_id":"abcxyz",
  "query":"select column_name from information_schema.columns where table_name='\''teams'\'' and column_name='\''tier'\'';"
}'

3. Vercel:部署 + 提升

从 git ref 触发生产部署:

composio execute VERCEL_CREATE_A_NEW_DEPLOYMENT -d '{
  "name":"web",
  "target":"production",
  "gitSource":{"type":"github","ref":"main","repoId":123456}
}'

轮询直到就绪:

composio execute VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL -d '{"idOrUrl":"dpl_xxx"}' \
  | jq '.readyState'

4. 验证

curl -fsS https://app.acme.com/api/health
composio execute SUPABASE_RUN_SQL_QUERY -d '{
  "project_id":"abcxyz","query":"select count(*) from teams where tier is null;"
}'

5. 公告

composio execute SLACK_SEND_MESSAGE -d '{
  "channel":"releases",
  "text":"✅ Team Plan v2 shipped. Stripe price `team-plan-v2` live, Supabase migration applied, Vercel production promoted."
}'

作为工作流文件运行

scripts/ship.ts,使用 composio run --file scripts/ship.ts -- --ref main 运行:

const ref = process.argv[process.argv.indexOf("--ref") + 1] ?? "main";

// 1. Stripe
const price = await execute("STRIPE_CREATE_PRICE", {
  product: "prod_abc123", unit_amount: 2900, currency: "usd",
  recurring: { interval: "month" }, lookup_key: "team-plan-v2"
});

// 2. Supabase
await execute("SUPABASE_APPLY_MIGRATION", {
  project_id: "abcxyz",
  name: "add_team_tier_column",
  query: "alter table teams add column tier text default 'free';"
});

// 3. Vercel
const dep = await execute("VERCEL_CREATE_A_NEW_DEPLOYMENT", {
  name: "web", target: "production",
  gitSource: { type: "github", ref, repoId: 123456 }
});

// 4. Wait for ready
let state = "QUEUED";
while (state !== "READY" && state !== "ERROR") {
  await new Promise(r => setTimeout(r, 4000));
  const d = await execute("VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL", { idOrUrl: dep.id });
  state = d.readyState;
}

if (state !== "READY") throw new Error("Vercel deploy failed");

// 5. Announce
await execute("SLACK_SEND_MESSAGE", {
  channel: "releases",
  text: `✅ Shipped ${ref}. Stripe price ${price.id}, Vercel ${dep.url}.`
});

回滚方案

如果验证失败,按相反顺序撤销:

  • Vercel:使用 VERCEL_PROMOTE_DEPLOYMENT 回退到上一个部署 ID。
  • Supabase:应用 down 迁移(发布前务必写好配对的 down.sql)。
  • Stripe:使用 STRIPE_UPDATE_PRODUCT 隐藏新价格(active:false);不要删除——Stripe 对象在实践中不可变,且会影响历史发票。
  • Slack:公告回滚。

故障排查

  • Stripe 价格可见但结账仍显示旧价格 → 应用侧缓存;确认结账获取的是正确的 lookup_key。
  • Supabase 迁移挂起 → 另一个连接持有锁;运行 select pid, state, query from pg_stat_activity where state <> 'idle';。
  • Vercel 部署卡在 QUEUED → 通过 VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL 加 ?logs=1 查看构建日志。
  • 顺序错误(前端在迁移应用前读取列)→ 始终串行执行流水线;不要在 Stripe/Supabase/Vercel 之间使用 --parallel。

完整 CLI 参考:docs.composio.dev/docs/cli