You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI/CD构建gtest库并跨测试阶段复用的问题咨询

GitLab CI构建并传递GTest库的解决方案

一、修改Build阶段:在工作目录内构建GTest

不在系统目录构建GTest,而是将编译产物安装到工作目录下的专属文件夹,这样就能通过GitLab CI的artifacts正常传递到Test阶段。

完整的build-job配置如下:

build-job:
  stage: build
  script:
    # 克隆GTest源码(也可以替换为wget下载指定版本的压缩包)
    - git clone https://github.com/google/googletest.git
    - cd googletest
    - mkdir build && cd build
    # 指定安装前缀为工作目录下的gtest-install,确保所有产物都在工作目录内
    - cmake .. -DCMAKE_INSTALL_PREFIX=../../gtest-install
    - make -j$(nproc)
    - make install
  artifacts:
    paths:
      - gtest-install/  # 传递整个安装目录到Test阶段
    expire_in: 1h  # 可选:设置过期时间,减少存储空间占用
  tags:
    - ubuntu

二、修改Test阶段:使用传递的GTest库

编译测试代码时,直接指定GTest的头文件和库路径,无需移动到系统目录,避免权限问题和环境污染。

完整的unit-test-job配置如下:

unit-test-job:
  stage: test
  script:
    # -I指定头文件路径,-L指定库路径,-Wl,-rpath指定运行时库加载路径
    - g++ test.cpp -I./gtest-install/include -L./gtest-install/lib -lgtest -lgtest_main -lpthread -Wl,-rpath=./gtest-install/lib -o test
    - ./test
  tags:
    - ubuntu

关于“先在工作目录构建再移至系统目录”的问题

这种方式可行,但不推荐,原因如下:

  • GitLab CI Runner通常没有root权限,无法直接写入/usr/lib等系统目录,执行sudo会失败(除非提前配置了免密sudo,但这会带来安全风险);
  • 修改系统目录会污染CI环境,可能对后续任务造成影响。

如果项目硬编码了系统路径必须使用/usr/lib,可以尝试在Test阶段添加sudo操作(需确保Runner支持):

unit-test-job:
  stage: test
  before_script:
    - sudo cp -r ./gtest-install/lib/* /usr/lib/
    - sudo cp -r ./gtest-install/include/* /usr/include/
  script:
    - g++ test.cpp -lgtest -lgtest_main -lpthread -o test
    - ./test
  tags:
    - ubuntu

内容的提问来源于stack exchange,提问作者dodle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 17:13:12