1. 课程导论与CI/CD基础
1.1 什么是CI/CD
CI/CD(持续集成/持续交付)是一套通过自动化构建、测试与部署来加速软件交付的工程实践。它把传统“开发→测试→运维”的手工接力转变为自动化流水线,让每次代码变更都能快速、可靠地进入生产环境。
| 概念 | 英文全称 | 核心目标 | 典型活动 |
|---|---|---|---|
| CI | Continuous Integration | 频繁合并代码并自动验证 | 代码提交 → 自动编译 → 单元测试 → 静态分析 |
| CD | Continuous Delivery | 确保代码随时可部署到生产 | 自动构建制品 → 集成测试 → 预发布环境验证 |
| CD | Continuous Deployment | 每次通过验证的变更自动上线 | 自动部署到生产 → 健康检查 → 回滚就绪 |
关键区分:Continuous Delivery 要求“一键部署”,但部署动作仍可由人工触发;Continuous Deployment 则完全自动化,无需人工干预。本课程以 Continuous Delivery 为主线,兼顾 Continuous Deployment 的进阶配置。
1.2 为什么Go Web服务需要CI/CD
Go 语言以其编译速度快、静态二进制、并发原生等特性成为构建 Web 服务的首选。然而,这些优势只有在配套的自动化流水线下才能充分发挥。以下是 Go Web 服务引入 CI/CD 的四个核心理由:
- 编译一致性:Go 交叉编译能力让开发者能在本地为 Linux/amd64 构建二进制,但依赖环境(CGO、系统库、Go 版本)差异常导致“本地能跑,服务器报错”。CI 流水线在统一环境中编译,消除环境漂移。
- 测试效率:Go 内置
go test与基准测试框架,CI 可并行执行单元测试、集成测试、竞态检测(-race),在合并前拦截回归。 - 多环境部署:Go 二进制部署简单(scp + systemd 即可),但开发、测试、预发布、生产环境需要不同的配置、数据库连接、日志级别。CD 流水线通过环境变量或配置文件注入,实现“一次构建,多处运行”。
- 快速回滚:Go 静态二进制天然支持版本化部署,CD 流水线保留历史制品,出现故障时可秒级回退到上一版本。
行业数据:采用 CI/CD 的团队,部署频率提升 46 倍,变更失败率降低 7 倍(DORA 2023 报告)。对于 Go Web 服务,编译+测试阶段平均耗时可压缩至 2-5 分钟。
1.3 CI/CD 核心流程(SVG)
下图展示了一个典型的 Go Web 服务 CI/CD 流水线,从代码提交到生产部署的完整路径:
1.4 课程目标与学习路径
本课程面向具备 Go 基础、希望掌握生产级 CI/CD 实践的开发者。完成课程后,你将能够:
- 独立设计并搭建 Go Web 服务的 CI/CD 流水线
- 配置多环境(开发/测试/预发布/生产)自动化部署
- 集成单元测试、集成测试、竞态检测与代码覆盖率门禁
- 使用 GitHub Actions / GitLab CI / Jenkins 等主流工具实现流水线
- 掌握制品管理、环境变量注入、健康检查与自动回滚策略
1.5 课程知识体系(SVG)
本课程共 30 章,按四个阶段递进展开。下图展示了整体知识结构:
1.6 学习准备与环境要求
| 工具/环境 | 版本要求 | 说明 |
|---|---|---|
| Go | ≥ 1.21 | 建议使用最新稳定版,支持 go mod 与 toolchain |
| Git | ≥ 2.30 | 用于版本管理与 CI 触发 |
| Docker | ≥ 24.0 | 用于容器化部署实验(阶段三开始使用) |
| CI 平台 | 任选其一 | GitHub Actions / GitLab CI / Jenkins(课程以 GitHub Actions 为主) |
| 云服务 | 可选 | 如 AWS EC2 / 阿里云 ECS 用于部署实践(本地虚拟机亦可) |
注意:本课程所有流水线配置均可在本地或免费层 CI 平台完成,无需付费订阅。部分部署章节使用 Docker Compose 模拟多环境,降低对真实云资源的依赖。