用途
本技能是一份跨平台的 CI/CD 流水线构建、配置与优化指南,帮助用户在 GitLab CI、Jenkins、CircleCI 等平台上设计并落地持续集成与持续部署流程。当用户提出“搭建 CI/CD”“创建流水线”“配置 Jenkins”“设置 GitLab CI”等需求时适用。
对于 GitHub Actions,资料中明确建议参考专门的 github-actions 技能,该技能深入覆盖工作流、矩阵构建、缓存、密钥和可复用操作。
核心概念
- 持续集成(CI):每次提交自动构建并测试代码。
- 持续交付(CD):自动准备可部署的发布版本(手动触发)。
- 持续部署(CD):自动部署每一个通过流水线的变更。
流水线结构:
- 提交 -> 构建 -> 测试 -> 扫描 -> 暂存 -> 部署 -> 监控
- 阶段(Stages):作业的逻辑分组(构建、测试、部署)。
- 作业(Jobs):阶段内的独立工作单元。
- 步骤(Steps):作业内的命令或操作。
- 制品(Artifacts):作业产出并在阶段间传递的文件。
- 触发器(Triggers):启动流水线的事件(推送、合并、定时、手动)。
流水线设计原则
- 快速失败:先运行快速检查(lint、语法),再运行慢速测试。
- 并行化:并发运行相互独立的作业。
- 积极缓存:避免重复构建未变更的依赖。
- 最小化制品:只传递下游作业所需的内容。
- 幂等部署:重复执行部署得到相同结果。
GitLab CI/CD
资料提供了基础 .gitlab-ci.yml 示例,包含 build、test、scan、deploy 四个阶段,使用 node 镜像、缓存 node_modules 与 .npm,构建产物 dist/ 保留 1 小时。测试阶段包含单元测试(带覆盖率与 JUnit 报告)和集成测试(使用 postgres:16、redis:7 服务)。扫描阶段包含 SAST(semgrep)与依赖扫描(npm audit),均允许失败。部署阶段包含 staging 与 production,production 为手动触发。
还介绍了规则与条件(rules、merge_request_event、trigger 下游流水线)以及矩阵构建(parallel.matrix 组合 NODE_VERSION 与 DB)。
Jenkins
资料提供声明式 Jenkinsfile 示例,包含 agent、environment、options(超时、禁止并发构建、日志轮转、时间戳)、parameters(部署环境选择、跳过测试),阶段涵盖 Checkout、Install、Lint & Format、Test(并行单元与集成测试)、Build Docker Image、Push Image、Deploy(input 审批、withCredentials、kubectl set image),post 部分包含成功/失败 Slack 通知与清理工作区。
同时提供脚本式 Jenkinsfile 示例,使用 node('docker')、try/catch/finally、parallel、docker.build、input、emailext 等。
还介绍 Jenkins 共享库:vars/standardPipeline.groovy 定义可复用流水线,通过 @Library 引入并传入 buildCommand、testCommand 等参数。
CircleCI
资料提供 .circleci/config.yml 示例,version 2.1,使用 node、docker、slack orb,定义 node-executor 与 node-with-db 执行器,install-deps 命令,以及 lint、unit-test(parallelism 4、按时间拆分测试文件)、integration-test(等待数据库、迁移、集成测试)、build-and-push(远程 Docker、构建并推送镜像)、deploy(参数化环境、Slack 通知)等作业。工作流 build-test-deploy 定义依赖关系,包含 hold-production 审批步骤。
流水线设计模式
- 扇出/扇入:并行运行多个作业,再汇聚到单个下游作业。资料给出 GitLab CI 示例,包含 build、test-unit、test-e2e、test-performance、merge-and-report、deploy。
- 矩阵构建:同时跨多个版本、平台或配置进行测试。资料给出 CircleCI 矩阵示例,组合 node-version 与 os。
- 条件流水线(Monorepo 策略):仅当相关文件变更时触发作业。资料给出 GitLab CI 示例,frontend、backend、infrastructure 分别根据 changes 规则触发。
缓存策略
- 分层缓存:资料给出 GitLab CI 示例,按 package-lock.json 缓存 node_modules,按作业名缓存 .next/cache 与 dist,测试作业使用 policy: pull 只读缓存。
- Docker 层缓存:资料给出 CircleCI 示例,使用 machine 执行器并开启 docker_layer_caching。
适用场景
适用于需要在多平台上搭建、配置或优化 CI/CD 流水线的开发与运维场景,包括构建测试部署流程、并行与矩阵测试、安全扫描、多环境部署、Monorepo 条件触发以及缓存优化。
限制
资料未提供各平台的具体收费、价格、版本要求或性能数据。GitHub Actions 的详细内容需参考专门的 github-actions 技能。