Skip to content

一键发布全栈产品:连接 Stripe、Supabase 与 Vercel

解决全栈发布割裂问题:通过单条命令或脚本,自动编排 Stripe 计费更新、Supabase 数据库迁移与 Vercel 前端部署,并在发布后进行健康检查与公告通知。

为什么需要这个技能

现代全栈项目常涉及三个核心环节:向 Stripe 创建价格或更新产品配置、向 Supabase 运行数据库迁移脚本、将新代码部署至 Vercel。以往需手动登录各个平台操作,不仅效率低下,还容易遗漏顺序(如先更新 DB 再部署前端)。

本技能利用 Composio CLI 将上述分散的工具连接成线,确保发布流程的原子性与顺序正确性,适合需要频繁迭代全栈产品的团队。

适用场景

  • 全栈产品发布:同步更新账单逻辑、数据库结构与新版本前端代码。
  • 紧急热点修复:快速推进修复构建到生产环境,并立即验证功能正常。
  • 自动化日常发布:配合 CI/CD 管道,在代码合并后自动触发带验证的发布序列。

核心工作流

环境初始化

首先确保本地已安装 Composio CLI 并完成账号链接。连接必须包含 Stripe、Supabase 和 Vercel,建议额外链接 Slack 用于发布公告。

bash
curl -fsSL https://composio.dev/install | bash
composio login
composio link stripe
composio link supabase
composio link vercel
composio link slack        # 用于发布通知

发现可用工具

确认各平台支持的 Slug 名称,以便在后续脚本中调用:

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

执行发布步骤

发布顺序至关重要:Stripe 调整 → Supabase 迁移 → Vercel 部署 → 验证健康 → Slack 通知

1. Stripe:创建或更新价格

定义新的订阅价格或更新现有产品配置:

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

2. Supabase:应用迁移

执行数据库结构的变更,随后运行校验查询:

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

验证字段是否成功添加:

bash
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:触发部署并轮询状态

向 Vercel 推送新代码并等待部署完成:

bash
# Trigger a production deployment from a git ref
composio execute VERCEL_CREATE_A_NEW_DEPLOYMENT -d '{
  "name":"web",
  "target":"production",
  "gitSource":{"type":"github","ref":"main","repoId":123456}
}'

轮询部署状态直到准备就绪:

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

4. 验证与通知

检查应用健康状态及数据库数据完整性,最后发送 Slack 通知:

bash
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;"
}'
bash
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 配合参数指定分支:

ts
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 回滚部署,再应用数据库反向迁移,最后在 Stripe 停用新价格(注意不可删除对象)。常见问题包括缓存导致的订单错乱或迁移锁导致的挂起,可通过检查 pg_stat_activity 或构建日志排查。

下载 deploy-pipeline 中文版 Skill ZIP

你可能还需要

暂无推荐