返回市场
自动部署

自动部署

作者:oslabs-beta6 星标更新:2025-11-16

项目介绍

使用AI和MCP自动生成安全的CI/CD流水线

文件结构的一般计划:

mcp-ci-cd-builder/
├── client/                # 使用React + Tailwind + Zustand的前端(维多利亚)
│   ├── src/
│   ├── public/
│   └── package.json
├── server/                # MCP编排器 + 适配器(洛伦茨)
│   ├── src/
│   ├── package.json
│   └── mcp.config.json
├── infra/                 # AWS OIDC + GitHub Actions工作流(亚历克斯)
│   ├── workflows/
│   └── terraform/ 或 aws-oidc.yml
├── tests/                 # 共享测试工具(Python)
│   ├── integration/
│   └── unit/
├── .github/
│   └── workflows/
│       └── ci.yml
├── README.md
└── .env.example

由洛伦茨添加 - 后端文件结构及当前后端流程:

序列图
前端 ->> 后端: GET /auth/github/start
后端 ->> GitHub: 将用户重定向到OAuth同意页面
GitHub ->> 后端: 带有code和state的回调
后端 ->> GitHub: POST /login/oauth/access_token
GitHub ->> 后端: 返回access_token
后端 ->> GitHub: GET /user, GET /user/emails
后端 ->> Supabase: 更新用户 + 连接
后端 ->> 前端: 重定向 / JSON成功

AutoDeploy/
│
├── server/                      # 主要后端服务
    └── lib/
       └── github-oauth.js      # GitHub API辅助函数
       ├── state.js             # CSRF状态存储(内存中)
    ├── routes/
        └── auth.github.js       # 所有GitHub OAuth + /me路由
		└── deployments.js
		└── usersRoutes
   ├── server.js                # Express初始化及路由挂载
   ├── db.js                    # pg连接池 + 查询() + 健康检查()

├── .env                         # 环境变量(GitHub, 数据库)
├── package.json / lock.json
├── .gitignore
└── (可选) client/           # 前端或测试脚本

包括:
	•	通过状态(内存存储)进行CSRF保护。
	•	使用实时GitHub API调用进行令牌交换和用户获取。
	•	对用户和连接进行更新逻辑(幂等)。
	•	在使用任何存储的令牌之前进行完整性检查。

功能性状态:
+-------------------+------------+-------------------------------------------------------------+
| 组件               | 状态       | 备注                                                       |
+-------------------+------------+-------------------------------------------------------------+
| Express应用       | ✅ 工作中 | 清洁中间件(CORS, Helmet, JSON, 日志记录)                  |
| 数据库连接       | ✅ 工作中 | 通过Supabase连接字符串连接Postgres                          |
| /health           | ✅ 工作中 | 返回运行时间                                               |
| /db/ping          | ✅ 工作中 | 验证数据库连接                                             |
| /users (POST/GET) | ✅ 工作中 | 基本用户CRUD                                               |
| /auth/github/*    | ✅ 工作中 | 完整的OAuth流程                                            |
| /auth/github/me   | ✅ 工作中 | 令牌完整性检查 + GitHub用户信息                             |
+-------------------+------------+-------------------------------------------------------------+

部署日志API

概述:
此部署日志API提供了一种轻量级、灵活的方式来记录、更新和检索来自GitHub Actions或其他CI/CD提供商的部署活动。
它旨在为MCP CI/CD构建器的部署跟踪和报告系统提供动力。

模式涵盖:
	-状态跟踪(排队、运行、成功、失败、取消)
	-基本上下文(提供商、repo_full_name、环境、分支)
	-时间数据(创建时间、完成时间、持续时间ms)
	-灵活的元数据以适应特定提供商的详细信息(GitHub运行ID、AWS区域)

API端点

POST
/deployments
创建一个新的部署记录(状态 = 排队)。

PATCH
/deployments/:id/status
更新部署状态并合并元数据。

GET
/deployments
列出部署(按仓库、环境或状态筛选)。

GET
/deployments/:id
通过ID检索单个部署记录。

----------------------------------------------------------------------------------------------------

🔁 部署重试与回滚

🧩 概述

重试与回滚系统通过增加以下功能来扩展现有的部署日志API:
	•	🔁 使用相同的提交(commit_sha)重试失败或不稳定部署。
	•	⏮️ 回滚到一个已知良好的先前提交。
	•	🧠 自动在deployment_logs表中跟踪这些事件,并带有清晰的动作类型:deploy, retry 和 rollback。

每个新动作都会创建自己的不可变记录,保留完整的部署历史和谱系。

端点

POST
/deployments/:id/retry
通过ID重试之前的部署。使用相同的提交、仓库和环境创建一个新的排队记录。

POST
/deployments/rollback
手动回滚到特定提交(commit_sha)。

POST
/deployments/rollback/last-success
自动回滚到同一仓库和环境下的最后一个成功提交。

---------------------------------------------------------------------------------------------------

数据库变更

ALTER TABLE public.deployment_logs
  ADD COLUMN IF NOT EXISTS action TEXT NOT NULL DEFAULT 'deploy',  -- deploy | retry | rollback
  ADD COLUMN IF NOT EXISTS parent_id UUID REFERENCES public.deployment_logs(id);

---------------------------------------------------------------------------------------------------

🧠 工作原理
	•	每次重试或回滚都会在deployment_logs中创建一行新的记录。
	•	parent_id字段链接回原始部署以实现可追溯性。
	•	action字段表示意图:
	•	deploy → 新部署
	•	retry → 相同提交的新尝试
	•	rollback → 回滚到之前的提交
	•	状态从排队开始,可以使用/deployments/:id/status端点过渡到运行、成功或失败。

                           ┌───────────────────────────────┐
                           │        用户 / API调用        │
                           └──────────────┬────────────────┘
                                          │
                                          ▼
                          ┌──────────────────────────────────┐
                          │     Express后端(API)        │
                          │  /deployments /rollback /retry   │
                          └──────────────┬───────────────────┘
                                         │
               ┌─────────────────────────┼─────────────────────────┐
               │                         │                         │
               ▼                         ▼                         ▼
     ┌────────────────┐       ┌──────────────────┐       ┌────────────────┐
     │  部署(新)  │       │   重试(相同)   │       │ 回滚(旧) │
     │ action=deploy  │       │ action=retry     │       │ action=rollback│
     └────────────────┘       └──────────────────┘       └────────────────┘
               │                         │                         │
               └──────────────┬──────────┴──────────┬──────────────┘
                              ▼                     ▼
                      ┌─────────────────────────────────────┐
                      │      Supabase deployment_logs       │
                      │  - repo_full_name, 环境      │
                      │  - 分支, commit_sha               │
                      │  - 状态, 动作, parent_id        │
                      │  - 元数据(额外信息)            │
                      └─────────────────────────────────────┘
                                          │
                                          ▼
                            ┌────────────────────────────┐
                            │     GitHub Actions API     │
                            │  (workflow_dispatch 调用)  │
                            └──────────────┬─────────────┘
                                           │
                                           ▼
                               ┌──────────────────────────┐
                               │   部署工作流运行   │
                               │ (构建, 测试, 发布)   │
                               └──────────────────────────┘

测试