SuperAPI AI 工具集

ci-cd-pipelines

部署与运维

查看项目

更新于 10-15 12:33

技能介绍

本资料是一份 CI/CD 流水线模式参考,主要面向使用 GitHub Actions 和 GitLab CI 的团队,提供可复用的配置示例与工程实践建议。

用途 用于搭建和优化持续集成/持续交付流水线,涵盖代码检查、类型检查、测试、构建、部署等环节的编排模式。资料以示例代码为主,展示如何组织多阶段作业、处理依赖关系、集成数据库服务以及管理生产部署。

主要能力与示例

GitHub Actions:

  • 工作流示例包含 lint、test、deploy 三个作业。触发条件为 main 分支的 push 和 pull_request。
  • 使用 concurrency 组(${{ github.workflow }}-${{ github.ref }})并设置 cancel-in-progress: true,自动取消过期运行。
  • 使用 needs 定义作业依赖(test 依赖 lint,deploy 依赖 test),deploy 仅在 github.ref == 'refs/heads/main' 且 environment: production 时执行。
  • test 作业使用 postgres:16 服务容器,配置健康检查参数(--health-cmd pg_isready 等),并通过环境变量 DATABASE_URL 连接。
  • 使用 actions/setup-node@v4 配合 node-version: 22 和 cache: npm 缓存依赖,运行 npm ci 与 npm test -- --coverage,最后用 codecov/codecov-action@v4 上传覆盖率。
  • 部署步骤执行 ./scripts/deploy.sh。

GitLab CI:

  • 定义 validate、test、build、deploy 四个阶段,使用变量 NODE_IMAGE: node:22-alpine。
  • lint 作业缓存 node_modules/,键为 $CI_COMMIT_REF_SLUG。
  • test 作业使用 postgres:16 服务,通过 coverage 正则提取语句覆盖率,并将 junit 与 cobertura 格式的报告作为 artifacts 输出。
  • build 作业使用 docker:24 与 docker:24-dind,执行 docker build 与 docker push,镜像标记使用 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA,仅在 main 分支执行。
  • deploy 作业配置 environment 名称与 url,执行 ./deploy.sh $CI_COMMIT_SHA,通过 rules 限定 main 分支并设置 when: manual 手动触发。

可复用 GitHub Action:

  • 提供复合 Action 示例(.github/actions/setup/action.yml),接受 node-version 输入(默认 "22"),封装 setup-node 与 npm ci 步骤。
  • 在工作流中通过 uses: ./.github/actions/setup 引用。

矩阵策略:

  • 示例展示 matrix 配置,node 版本 [20, 22],os 为 [ubuntu-latest, macos-latest],设置 fail-fast: false 避免单个失败取消其他组合。

反模式提示 资料列出若干应避免的实践:不在运行间缓存依赖;将本可并行的 lint 与 test 顺序执行;把密钥写入工作流文件而非仓库/环境机密;缺少 concurrency 组导致快速推送时产生冗余运行;矩阵构建未设置 fail-fast: false;生产部署缺少审批门或环境防护规则。

检查清单 资料给出核对项:依赖在 CI 运行间缓存;并发组取消过期流水线;lint、typecheck、test 作为独立可并行作业;数据库服务在测试前完成健康检查;覆盖率报告上传并跟踪;生产部署作业需审批;可复用 Action/模板抽取公共安装步骤;机密存放于 CI 平台而非代码中。

适用场景 适用于需要为 Node.js 项目(示例使用 Node 22、npm、PostgreSQL)搭建 CI/CD 的团队,尤其关注并行作业、缓存、覆盖率、Docker 构建与生产部署审批等常见需求。

限制 资料内容为配置模式与示例代码,未提供产品自身安装方式、收费或价格、平台支持范围、效果指标等信息。具体环境适配与运行结果需结合实际项目验证。