温馨提示×

C++项目在Ubuntu如何进行持续集成

小樊
42
2025-11-15 13:01:38
栏目: 编程语言

在 Ubuntu 上为 C++ 项目搭建持续集成

一 方案总览与选型

  • 常见方案包括:
    • GitHub Actions(托管在 GitHub,配置即代码,适合开源与团队协作)
    • Jenkins(自托管,灵活可扩展,适合内网与复杂流水线)
    • GitLab CI/CD(与 GitLab 深度集成,适合一体化平台)
    • Travis CI(与 GitHub 集成,轻量入门)
  • 基础环境建议:在 Ubuntu 上安装 build-essential(包含 GCC/G++)、CMakeGit 等开发工具,作为所有 CI 运行时的共同基线。

二 快速上手 GitHub Actions

  • 在项目根目录创建文件:.github/workflows/ci.yml
  • 示例(检出代码 → 安装编译器 → CMake 构建 → CTest 运行测试):
name: C++ CI

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

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install dependencies
        run: sudo apt-get update && sudo apt-get install -y g++ cmake

      - name: Configure
        run: |
          mkdir -p build
          cd build
          cmake -DCMAKE_BUILD_TYPE=Release ..

      - name: Build
        run: cmake --build build -j$(nproc)

      - name: Test
        run: cd build && ctest --output-on-failure
  • 要点:将测试接入 CTest,便于在 CI 中统一执行与输出结果;可按需扩展矩阵构建(不同编译器、标准、构建类型)。

三 自托管 Jenkins 流水线

  • 在 Ubuntu 安装与启动 Jenkins(示例):
sudo apt update
sudo apt install -y openjdk-11-jre
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \
  /usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt update
sudo apt install -y jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins
  • 在 Jenkins 中创建 Pipeline 任务,选择“Pipeline script from SCM”,SCM 选 Git,指定仓库与分支,脚本路径为 Jenkinsfile
  • 示例 Jenkinsfile(与 GitHub Actions 思路一致:拉取 → 配置 → 构建 → 测试):
pipeline {
  agent any
  stages {
    stage('Checkout') {
      steps { git url: 'https://github.com/your-org/your-cpp-project.git', branch: 'main' }
    }
    stage('Install deps') {
      steps { sh 'sudo apt-get update && sudo apt-get install -y g++ cmake' }
    }
    stage('Configure') {
      steps {
        sh 'mkdir -p build && cd build && cmake -DCMAKE_BUILD_TYPE=Release ..'
      }
    }
    stage('Build') {
      steps { sh 'cmake --build build -j$(nproc)' }
    }
    stage('Test') {
      steps { sh 'cd build && ctest --output-on-failure' }
    }
  }
}
  • 要点:Jenkins 适合需要私有化、复杂流程编排与制品归档的场景;通过插件(如 Git、Pipeline)即可快速落地。

四 其他托管与自建选项

  • GitLab CI/CD:在项目根目录创建 .gitlab-ci.yml,使用 ubuntu:20.04/22.04 镜像安装 g++ 后执行构建与测试,适合与 GitLab 仓库一体化使用。
  • Travis CI:在仓库根目录创建 .travis.yml,指定语言为 c++,在 install/script 阶段安装依赖并执行构建与测试,适合轻量开源项目快速接入。

五 质量门禁与最佳实践

  • 编译器与警告:在 CMake 或编译命令中启用 -Wall -Wextra,必要时加入 -Werror;保持代码在 CI 中始终以较严格标准编译。
  • 静态分析:在 CI 中加入 CppcheckClang Static Analyzer,尽早发现潜在缺陷。
  • 测试与报告:使用 CTest 运行单元/集成测试,必要时结合覆盖率工具(如 gcov/lcov)并上传报告,作为合并前的质量门槛。
  • 依赖管理:优先使用 apt 安装系统库;对第三方依赖可用 vcpkgConan 统一管理,并在 CI 中缓存以加速构建。

0