ci-cd-and-automation
自动化 CI/CD 流水线设置。适用于搭建或修改构建和部署流水线,自动化质量门禁,在 CI 中配置测试运行器,或建立部署策略。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
自动化 CI/CD 流水线设置。适用于搭建或修改构建和部署流水线,自动化质量门禁,在 CI 中配置测试运行器,或建立部署策略。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Manage git submodules for the learning-open-code mono-repo. Use when the user wants to: (1) Add a new git submodule — auto-detect or specify the category (open-ai-skills/open-sdd/open-ai-agent/open-ai-desktop/open-knowledge/open-productivity/open-java/open-trading/open-data), record the tracking branch in .gitmodules, clone the repo, and update README.md index. (2) Sync all existing submodules to their configured branches (git fetch + checkout branch + pull). (3) Update the root README.md with an up-to-date index of all synced projects grouped by category. (4) Initialize submodules after git clone — when open-*/ directories are empty or git submodule status returns nothing, guide through the full SOP (git submodule update --init --recursive [--remote]). Trigger keywords: submodule, git submodule, 子模块, add submodule, sync submodule, update submodule, submodule branch, README index, 更新索引, clone, init, 初始化子模块, submodule init, 拉取子模块.
对开源项目进行穷尽式教学文档生成——从宏观架构到微观实现的五层分级讲解,使用 Goal Loop 算法自主驱动完整代码覆盖。所有具体教学内容生成必须激活 `.agents/skills/teach/SKILL.md`。触发条件:用户要求"完整学习某个项目"、"生成项目架构文档"、"从入口到落地讲清楚每个功能"、"代码考古"、"源码分析"、或指定一个项目目录/仓库要求全面教学。
使用并行子 agent 为模块生成多个截然不同的接口设计。当用户想要设计 API、探索接口选项、比较模块形态,或提到 "设计两次" 时使用。
交互式 QA 会话,用户以对话方式报告 bug 或问题,agent 将其录入 GitHub Issue。在后台探索代码库以获取上下文和领域语言。当用户想要报告 bug、做 QA、以对话方式录入 issue,或提及 "QA session" 时使用。
通过用户访谈创建包含微小提交的详细重构计划,并将其录入 GitHub Issue。当用户想要规划重构、创建重构 RFC,或将重构分解为安全的渐进步骤时使用。
从当前对话中提取 DDD 风格的通用语言词汇表,标记歧义并提出规范术语。保存到 UBIQUITOUS_LANGUAGE.md。当用户想要定义领域术语、构建词汇表、固化术语、创建通用语言,或提到 "领域模型" 或 "DDD" 时使用。
| name | ci-cd-and-automation |
| description | 自动化 CI/CD 流水线设置。适用于搭建或修改构建和部署流水线,自动化质量门禁,在 CI 中配置测试运行器,或建立部署策略。 |
自动化质量门禁,确保没有任何变更能在未通过测试、lint、类型检查和构建的情况下到达生产环境。CI/CD 是其他所有技能的强制执行机制 —— 它能捕捉人类和 agent 遗漏的问题,并在每次变更中都一致地执行。
左移(Shift Left): 尽可能在流水线早期发现问题。在 lint 阶段捕获的 bug 修复成本以分钟计;同样的 bug 在生产环境中修复成本以小时计。将检查前移 —— 静态分析在测试之前,测试在 staging 之前,staging 在生产环境之前。
更快即更安全: 更小的批次和更频繁的发布降低风险而非增加风险。包含 3 个变更的部署比包含 30 个变更的更容易调试。频繁发布能增强对发布流程本身的信心。
每个变更在合并前都要经过以下门禁:
Pull Request 已创建
│
▼
┌─────────────────┐
│ 代码规范检查 │ eslint、prettier
│ ↓ 通过 │
│ 类型检查 │ tsc --noEmit
│ ↓ 通过 │
│ 单元测试 │ jest/vitest
│ ↓ 通过 │
│ 构建 │ npm run build
│ ↓ 通过 │
│ 集成测试 │ API/DB 测试
│ ↓ 通过 │
│ E2E(可选) │ Playwright/Cypress
│ ↓ 通过 │
│ 安全审计 │ npm audit
│ ↓ 通过 │
│ 包体积检查 │ bundlesize 检查
└─────────────────┘
│
▼
准备就绪,可进行代码审查
任何门禁都不能跳过。 如果 lint 失败,修复 lint —— 不要禁用规则。如果测试失败,修复代码 —— 不要跳过测试。
# .github/workflows/ci.yml
name: CI
on:
pull_request:
branches: [main]
push:
branches: [main]
jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint
- name: Type check
run: npx tsc --noEmit
- name: Test
run: npm test -- --coverage
- name: Build
run: npm run build
- name: Security audit
run: npm audit --audit-level=high
integration:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16
env:
POSTGRES_DB: testdb
POSTGRES_USER: ci_user
POSTGRES_PASSWORD: ${{ secrets.CI_DB_PASSWORD }}
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- run: npm ci
- name: Run migrations
run: npx prisma migrate deploy
env:
DATABASE_URL: postgresql://ci_user:${{ secrets.CI_DB_PASSWORD }}@localhost:5432/testdb
- name: Integration tests
run: npm run test:integration
env:
DATABASE_URL: postgresql://ci_user:${{ secrets.CI_DB_PASSWORD }}@localhost:5432/testdb
注意: 即使是仅供 CI 使用的测试数据库,也应使用 GitHub Secrets 存储凭证,而非硬编码值。这能培养良好习惯,并防止在其他上下文中意外重复使用测试凭证。
e2e:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- run: npm ci
- name: Install Playwright
run: npx playwright install --with-deps chromium
- name: Build
run: npm run build
- name: Run E2E tests
run: npx playwright test
- uses: actions/upload-artifact@v4
if: failure()
with:
name: playwright-report
path: playwright-report/
CI 与 AI agent 结合的威力在于反馈循环。当 CI 失败时:
CI 失败
│
▼
复制失败输出
│
▼
将其反馈给 agent:
"CI 流水线失败,错误如下:
[粘贴具体错误]
修复问题并在再次推送前本地验证。"
│
▼
Agent 修复 → 推送 → CI 再次运行
关键模式:
代码规范失败 → Agent 运行 `npm run lint --fix` 并提交
类型错误 → Agent 读取错误位置并修复类型
测试失败 → Agent 遵循 debugging-and-error-recovery 技能
构建错误 → Agent 检查配置和依赖
每个 PR 获得一个预览部署用于手动测试:
# 为 PR 部署预览(Vercel/Netlify 等)
deploy-preview:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- uses: actions/checkout@v4
- name: Deploy preview
run: npx vercel --token=${{ secrets.VERCEL_TOKEN }}
功能标志将部署与发布解耦。将未完成或有风险的功能放在标志后面,以便:
// 简单的功能标志模式
if (featureFlags.isEnabled('new-checkout-flow', { userId })) {
return renderNewCheckout();
}
return renderLegacyCheckout();
标志生命周期: 创建 → 为测试启用 → 灰度 → 全量上线 → 移除标志和死代码。永远存在的标志会变成技术债务 —— 创建时就设定清理日期。
PR 合并到 main
│
▼
Staging 部署(自动)
│ 手动验证
▼
生产环境部署(手动触发或在 staging 之后自动触发)
│
▼
监控错误(15 分钟观察窗口)
│
├── 检测到错误 → 回滚
└── 一切正常 → 完成
每次部署都应该是可逆的:
# 手动回滚工作流
name: Rollback
on:
workflow_dispatch:
inputs:
version:
description: '要回滚到的版本'
required: true
jobs:
rollback:
runs-on: ubuntu-latest
steps:
- name: Rollback deployment
run: |
# 部署指定的先前版本
npx vercel rollback ${{ inputs.version }}
.env.example → 已提交(供开发人员参考的模板)
.env → 不提交(本地开发)
.env.test → 已提交(测试环境,无真实密钥)
CI secrets → 存储在 GitHub Secrets / vault 中
Production secrets → 存储在部署平台 / vault 中
CI 绝不应持有生产环境密钥。为 CI 测试使用独立的密钥。
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
interval: weekly
open-pull-requests-limit: 5
指定某人负责保持 CI 绿色。当构建失败时,Build Cop 的职责是修复或回滚 —— 而非由造成失败的人来修复。这能防止在每个人都认为别人会修复时构建持续处于失败状态。
当流水线超过 10 分钟时,按影响大小依次应用以下策略:
CI 流水线太慢?
├── 缓存依赖
│ └── 为 node_modules 使用 actions/cache 或 setup-node 的 cache 选项
├── 并行运行任务
│ └── 将 lint、typecheck、test、build 拆分为独立的并行任务
├── 仅运行变更相关的内容
│ └── 使用路径筛选跳过不相关的任务(例如,对于仅文档变更的 PR 跳过 e2e)
├── 使用矩阵构建
│ └── 将测试套件分片到多个 runner 上
├── 优化测试套件
│ └── 将慢速测试从关键路径移除,改为按计划运行
└── 使用更大的 runner
└── GitHub 托管的大型 runner 或自托管用于 CPU 密集型构建
示例:缓存与并行
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '22', cache: 'npm' }
- run: npm ci
- run: npm run lint
typecheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '22', cache: 'npm' }
- run: npm ci
- run: npx tsc --noEmit
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '22', cache: 'npm' }
- run: npm ci
- run: npm test -- --coverage
| 借口 | 现实 |
|---|---|
| "CI 太慢了" | 优化流水线(参见下方 CI 优化),不要跳过它。一个 5 分钟的流水线能防止数小时的调试。 |
| "这个改动很简单,跳过 CI 吧" | 简单的改动也会破坏构建。而且简单改动的 CI 本来就很快。 |
| "这个测试不稳定,重新运行就行" | 不稳定的测试掩盖了真实 bug,浪费所有人的时间。修复不稳定性。 |
| "我们以后再添加 CI" | 没有 CI 的项目会积累各种破坏状态。从第一天就设置好。 |
| "手动测试就够了" | 手动测试不可扩展且不可重复。尽可能自动化。 |
设置或修改 CI 之后: