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
相关产品推荐
相关产品推荐

