如何在GitLab存储库中集成CMake以进行持续集成(CI)

7

我能够使用gcc的Docker镜像运行C++程序,并通过GitLab CI单元测试它。但现在,我想使用cmake在docker中编译程序,而不是使用g++。如何更改“.gitlab-ci.yml”文件以支持cmake。

当前文件:.gitlab-ci.yml

image: gcc
before_script:
   - apt-get install --yes cmake libmatio-dev libblas-dev libsqlite3-dev libcurl4-openssl-dev
   - apt-get install --yes libarchive-dev liblzma-dev

build:
  script:
    - ./runner.sh
    - ./bin/hello

./runner.sh

cmake -H. -Bbuild
cmake --build build -- -j3

在脚本部分运行cmake?而且cmake和g++并不是互斥的。前者是一个构建系统,后者是一个编译器。 - Ivan Aksamentov - Drop
我想在包含CMake命令的Docker中运行./runner.sh,那么我该如何使其工作? - Thomas Easo
具体是什么出了问题?我无法运行你的.gitlab-ci.yml文件,因为我不知道runner.sh是什么。如果你想得到帮助,请更好地解释问题,并将所有必要的信息放入问题中。 - Ivan Aksamentov - Drop
./runner.sh 包含cmake -H. -Bbuild cmake --build build -- -j3 - Thomas Easo
2个回答

6
我认为你需要添加apt-get update以安装cmake。请参阅这里
image: gcc
before_script:
 - apt-get update --yes
 - apt-get install --yes cmake

build:
  script:
    - ./runner.sh
    - ./bin/hello

通常情况下,您可以通过进入Docker镜像进行调试来解决问题(在您的情况下,该镜像是基于Debian的gcc:latest)。
sudo docker run -it --rm gcc

如果您在gcc容器内运行了原始的apt-get install命令,您会看到以下错误消息,然后您可以通过谷歌搜索找出需要执行apt-get update命令。
sudo docker run -it --rm gcc apt-get install --yes cmake
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package cmake is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'cmake' has no installation candidate

正如这篇博客文章所提到的,您可以通过下载gitlab-runner可执行文件在本地进行测试运行。
gitlab-runner exec docker build

在本地运行gitlab-runner将使gitlab克隆您的repo并运行.gitlab-ci.yml中的所有步骤,您可以快速在本地查看输出和调试。

感谢nktiwari的分享:了解如何调试非常有用。最好的祝福,SG。 - stephanmg
如果您在gitlab-runner服务正在运行时安装cmake,则需要在更改PATH环境变量后重新启动服务。 - Nathan Moinvaziri

0
在同一阶段的作业将并行运行。
如果作业处于不同的阶段,gitlab-runner将重新创建一个没有cmake的新镜像。
我最终将"获取依赖"和"构建"放在一个作业中,并尝试GitHub Actions。
无论如何,也许这个[https://dev59.com/U1MI5IYBdhLWcg3wPo8a]对您可能会感兴趣。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接