GitHub Actions 与 CI/CD 全流程解析

本教程内容整理自 张子彤 - GitHub Actions 与 CI/CD 全流程解析 - 20250917 的演讲视频,属于 PLCT 实验室内部报告,仅供技术交流使用。演讲围绕 GitHub Actions 平台展开,结合 CI/CD 的核心理念,系统讲解了从工作流配置到流水线部署的关键步骤。

如有疏漏或错误之处,欢迎批评指正,共同完善。如需转载或引用本文内容,请注明出处,尊重原作者的劳动成果。

一、GitHub Actions 概述

GitHub Actions 是 GitHub 提供的 CI/CD 平台,能够自动化代码开发流程,包括构建、测试和部署等环节。

核心机制包括:

  • 流程自动化:通过编写工作流(Workflow),定义在特定事件触发时执行的步骤。例如:
    • 提交 Pull Request 时自动构建和测试
    • 合并 PR 后自动部署到生产环境
  • 事件驱动:工作流可响应仓库中的多种事件,如新建 Issue 时自动添加标签。
  • 运行环境:支持 Linux、Windows 和 macOS 虚拟机,也可使用自托管运行器(Self-hosted Runner)

二、GitHub Actions 核心组件

组件名称 定义与作用
工作流(Workflow) 自动化流程定义,配置于 .github/workflows/ 目录下的 YAML 文件
事件(Event) 触发工作流的仓库活动,如 PR 创建、Issue 打开、代码推送等
作业(Job) 工作流中的任务集合,支持并行或顺序执行,可设置依赖关系
步骤(Step) 作业中的执行单元,可为脚本或复用模块(Action),步骤间可共享数据
动作(Action) 可复用的任务模块,用于拉取代码、配置工具链、设置认证等。可自定义或从 Marketplace 获取
运行器(Runner) 执行作业的服务器。支持默认虚拟机或自托管运行器,每次运行使用全新环境

三、CI/CD 概述

CI/CD 是现代软件开发的核心流程,涵盖持续集成(CI)、持续交付(CD)和持续部署(CD)。

概念 英文缩写 定义
持续集成 CI 自动进行代码检查、测试和构建
持续交付 CD 测试通过后可随时发布,但需人工确认
持续部署 CD 测试通过后自动部署到生产环境,无需人工干预

四、CI/CD 流水线步骤

一个完整的 CI/CD 流程通常包括以下阶段:

1. 触发阶段(Trigger Phase)

流水线由特定事件触发,例如:

  • 代码提交到版本控制系统
  • 定时任务(如夜间构建)
  • 开发人员手动触发

触发后,系统开始执行预设的自动化流程。

2. 拉取代码(Code Checkout)

从版本库中拉取最新的源代码,确保构建和测试基于最新提交。

3. 构建阶段(Build Phase)

将源码编译为可执行文件,常见任务包括:

  • 编译代码(如将 Java 源码编译为字节码)
  • 打包为可部署文件(如生成 Docker 镜像)

4. 测试阶段(Testing Phase)

对构建产物进行质量验证,测试类型包括:

  • 单元测试:验证单个组件
  • 集成测试:验证组件间交互
  • 功能测试与安全测试:模拟用户操作,发现潜在问题

测试失败时,流程暂停,需修复后重新执行。

5. 交付 / 部署阶段(Delivery / Deployment Phase)

将应用部署至目标环境,通常包括:

  • 预发布环境(Staging):模拟生产环境,进行最终验证
  • 生产环境(Production):正式对外服务

常见部署策略:

  • 蓝绿部署:新旧环境并行,验证后切换流量,支持快速回滚
  • 滚动更新:逐步替换旧版本,降低风险,实现平滑过渡

6. 监控与反馈阶段(Monitoring & Feedback)

部署后持续监控应用运行状态,收集用户反馈,发现并修复生产环境中的问题,形成闭环,推动持续优化。

五、GitHub Actions CI/CD 实践

为提升效率、安全性和可维护性,推荐以下实践:

  • 模块化工作流:将不同任务拆分为多个 YAML 文件,如代码检查、构建、部署等。
  • 构建加速:使用 actions/cache 缓存依赖,减少重复下载时间。
  • 优先执行测试与规范检查:将 Lint 和单元测试放在构建前,避免资源浪费。
  • 安全管理密钥(Secrets)
    • 使用 GitHub Secrets 存储敏感信息
    • 避免硬编码,定期轮换,权限最小化
  • 环境保护规则
    • 设置部署审批流程
    • 限制特定分支或人员使用生产环境 Secret
  • 稳定版本部署
    • 仅允许 mainrelease 分支触发部署
    • 或通过打版本标签触发,确保可回溯性
  • 复用工作流
    • 抽取公共逻辑为可复用工作流,多个仓库共享,统一维护
  • 矩阵策略测试
    • 在不同操作系统和语言版本组合下运行同一作业,确保兼容性
  • 通知机制
    • 构建失败及时通知开发者
    • 部署成功通知团队,提升协作效率
  • 工作流指标监控
    • 使用 GitHub Insights 查看运行时间、排队时间、成功率等
    • 找出瓶颈,优化并行策略与缓存策略

如果你正在构建自己的 CI/CD 流程,欢迎参考本文内容进行实践,也欢迎在评论区交流经验~

3 个赞

好耶,感觉可以顺便贴在b站的评论区

感谢建议~已经贴过去了 :grin:

1 个赞