C++ 项目的 CI/CD:GitHub Actions 完整配置指南
在现代软件开发中,构建、测试和部署流程的自动化已不仅是一种便利,更是必需品。对于通常具有复杂构建系统和依赖关系的 C++ 项目而言,实施 CI/CD(持续集成/持续部署)尤为重要。本文将详细介绍如何使用 GitHub Actions(一个强大且内置的自动化工具)为 C++ 项目设置 CI/CD 管道。
什么是 GitHub Actions?为何它适合 C++ 项目?
GitHub Actions 是一个工作流自动化平台,允许您直接在 GitHub 仓库中创建 CI/CD 管道。对于 C++ 开发者来说,它因以下原因成为理想选择:
- 公共仓库免费构建时长
- 支持 Linux、macOS 和 Windows — 可测试跨平台构建
- 通过 YAML 文件灵活配置
- 庞大的现成操作生态系统,用于安装编译器、依赖项和工具
主要元素是 工作流,它定义在文件 .github/workflows/*.yml 中。每个工作流包含一个或多个在虚拟机(Runner)上运行的 作业。
设置基础管道:构建与测试
让我们从最简单的开始 — 创建一个工作流,每次将更改推送到 main 分支或创建拉取请求时,它都会使用 CMake 构建您的 C++ 项目并运行测试。
在仓库根目录下创建文件 .github/workflows/build.yml,并添加以下代码:
name: C++ CI Build
on: push: branches: [ "main" ] pull_request: branches: [ "main" ]
jobs: build: runs-on: ubuntu-latest
steps: - name: Checkout repository uses: actions/checkout@v4
- name: Install dependencies run: | sudo apt-get update sudo apt-get install -y cmake g++ libgtest-dev
- name: Configure CMake run: cmake -B build -DCMAKE_BUILD_TYPE=Release
- name: Build run: cmake --build build --config Release
- name: Run tests working-directory: ./build run: ctest --output-on-failure让我们逐步分解这段代码:
- name — 将在 GitHub 界面中显示的工作流名称
- on — 触发工作流的事件(推送到 main 和针对 main 的拉取请求)
- runs-on — Runner 的操作系统(ubuntu-latest、windows-latest、macos-latest)
- actions/checkout — 克隆仓库的标准操作
- Install dependencies — 安装 CMake、GCC 编译器和用于单元测试的 Google Test 库
- Configure, Build, Run tests — 用于构建和运行测试的标准 CMake 命令
优化:缓存与矩阵构建
基础管道可以工作,但可以进行显著改进。两个关键技术是 依赖缓存 和 矩阵构建。
使用缓存加速构建
每次运行工作流时,Runner 都会从头下载所有依赖项。这很耗时。使用 actions/cache 保存 CMake 缓存和已安装的包:
- name: Cache CMake build uses: actions/cache@v3 with: path: | build /usr/l