C++项目的CI/CD:从零开始掌握GitHub Actions

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么C++项目需要CI/CD?

C++开发传统上一直与手动构建、运行测试和细致的版本控制相关联。然而,在现代开发中,尤其是在团队协作时,这种方法会成为瓶颈。CI/CD(持续集成/持续部署)是一种自动化代码构建、测试和部署流程的实践。对于C++项目而言,由于编译或链接错误可能仅在特定平台上出现,CI/CD显得至关重要。

GitHub Actions是GitHub内置的一个强大且灵活的工具,它允许你直接在仓库中创建流水线。在本文中,我们将逐步介绍如何使用GitHub Actions从零开始为C++项目设置CI/CD。你将学习如何使用CMake自动化构建、运行单元测试、检查代码质量,甚至发布版本。

通过阅读本文,你将能够独立配置一个流水线,从而节省数小时的手动工作量,并提高项目的可靠性。



主体部分:GitHub Actions for C++ 分步指南



1. GitHub Actions基础:工作流、作业和步骤

在编写代码之前,我们先了解一些术语。GitHub Actions基于工作流,它们被描述在.github/workflows/目录下的YAML文件中。每个工作流由一个或多个作业组成,这些作业可以并行或顺序运行。每个作业由步骤组成——即单个命令或操作。

对于一个C++项目,典型的工作流包括:

  • 构建:使用CMake和Make/Ninja编译项目。
  • 测试:运行单元测试(例如,使用Google Test或Catch2)。
  • 代码检查:使用静态分析器(Clang-Tidy, Cppcheck)检查代码。
  • 部署:发布构建产物或版本。

第一个工作流通常是为在Ubuntu上的基础构建而创建的,但C++需要在不同的操作系统(Linux、macOS、Windows)上进行测试。GitHub Actions支持所有这三个平台。



2. 创建你的第一个工作流:构建和测试

在你的仓库根目录下创建一个文件.github/workflows/ci.yml。下面是一个使用CMake和Google Test的项目的示例。

name: C++ CI/CD Pipeline

on: push: branches: [ main, develop ] pull_request: branches: [ main ]

jobs: build: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] build_type: [Debug, Release] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install dependencies (Linux) if: runner.os == 'Linux' run: sudo apt-get update && sudo apt-get install -y cmake g++ ninja-build - name: Install dependencies (macOS) if: runner.os == 'macOS' run: brew install cmake ninja - name: Install dependencies (Windows) if: runner.os == 'Windows' run: choco install cmake ninja -y - name: Configure CMake run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} - name: Build run: cmake --build build --config ${{ matrix.build_type }} - name: Run tests working-directory: build run: ctest --output-on-failure -C ${{ matrix.build_type }}

这个工作流:

  • 在推送到main或develop分支时,以及创建拉取请求时触发。
  • 使用策略矩阵在三个操作系统和两种配置(Debug/Release)下进行构建。
  • 根据操作系统安装依赖项(CMake, Ninja)。

博客

书籍推荐