C++项目的CI/CD:从A到Z掌握GitHub Actions

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

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

开始课程

使用GitHub Actions进行C++ CI/CD简介

\n

现代C++开发离不开构建和测试流程的自动化。CI/CD(持续集成/持续部署)使团队能够快速发现错误、自动构建二进制文件并部署应用程序。GitHub Actions是GitHub内置的强大工具,非常适合C++项目。在本文中,我们将详细介绍如何为C++配置完整的CI/CD流水线:从使用CMake编译到部署最终构建产物。

\n

我们将探讨真实的代码示例、常见错误和最佳实践。阅读本文后,您将能够独立为您的C++项目实施CI/CD。

\n\n

用于C++的GitHub Actions基础

\n

工作流文件结构

\n

GitHub Actions中的工作流由位于.github/workflows/目录下的YAML文件定义。让我们看一个C++项目的基本示例:

\n
name: C++ CI/CD Pipeline\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v4\n\n    - name: Install dependencies\n      run: |\n        sudo apt-get update\n        sudo apt-get install -y cmake g++ libboost-all-dev\n\n    - name: Configure with CMake\n      run: mkdir build && cd build && cmake ..\n\n    - name: Build project\n      run: cd build && make -j$(nproc)\n\n    - name: Run tests\n      run: cd build && ctest --output-on-failure
\n

此工作流在推送到main和develop分支以及创建pull request时触发。它会安装依赖项、通过CMake配置构建、编译项目并运行测试。

\n\n

选择操作系统和编译器

\n

GitHub Actions支持Linux (ubuntu)、macOS和Windows。对于跨平台项目,可以使用构建矩阵:

\n
jobs:\n  build:\n    strategy:\n      matrix:\n        os: [ubuntu-latest, macos-latest, windows-latest]\n        compiler: [g++, clang++]\n    runs-on: ${{ matrix.os }}\n\n    steps:\n    - name: Set compiler\n      run: |\n        if [ "${{ matrix.os }}" == "windows-latest" ]; then\n          echo "CXX=cl.exe" >> $GITHUB_ENV\n        else\n          echo "CXX=${{ matrix.compiler }}" >> $GITHUB_ENV\n        fi\n      shell: bash
\n

这允许您检查代码与不同编译器和操作系统的兼容性。

\n\n

高级配置:测试、缓存和构建产物

\n

依赖项缓存

\n

GitHub Actions中的每次构建都从干净的环境开始。为了加速此过程,可以缓存下载的包和库:

\n
- name: Cache CMake build directory\n  uses: actions/cache@v3\n  with:\n    path: build\n    key: ${{ runner.os }}-cmake-${{ hashFiles('**/CMakeLists.txt') }}\n    restore-keys: |\n      ${{ runner.os }}-cmake-\n\n- name: Configure CMake\n  run: cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
\n

如果CMakeLists.txt文件未更改,则会恢复缓存,从而在重复构建时节省时间。

\n\n

使用Google Test运行单元测试

\n

C++经常使用Google Test。让我们添加一个测试阶段,并生成JUnit格式的报告:

\n
- name: Build and run tests\n  run: |\n    cmake --build build --target all_tests\n    cd build && ctest --output-junit test-results.xml\n\n- name: Upload test results\n  if: always()\n  uses: actions/upload-artifact@v4\n  with:\n    name: test-results-${{ runner.os }}\n    path: build/test-results.xml
\n

if: always()标志确保即使测试失败也能上传报告。

\n\n

创建和发布构建产物

\n

成功构建后,可以保存二进制文件:

\n
- name: Build release binary\n  run: cmake --build build --config Release\n\n- name: Upload build artifacts\n  uses: ac                

博客

书籍推荐