Thomas Easo
Thomas Easo

Reputation: 3758

how to integrate cmake in gitlab repository for Continuous Integration(CI)

I was able to run the C++ Program and build & test it using GitLab CI unit with the help of Docker Image of gcc. But now I want to compile the program in docker using cmake instead of g++. How to change the '.gitlab-ci.yml' file to support cmake.

Current File : .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

Upvotes: 7

Views: 17726

Answers (2)

relascope
relascope

Reputation: 4646

Jobs in the same stage are run in parallel.

If the jobs are in different stages, gitlab-runner will recreate a new image without cmake.

I ended up having "get dependencies" and "build" in one job and will try GitHub Actions.

Anyway, maybe this [https://stackoverflow.com/questions/56706096/how-can-i-persist-a-docker-image-instance-between-stages-of-a-gitlab-pipeline] could be of interest.

Upvotes: 0

nktiwari
nktiwari

Reputation: 112

I think you need to add apt-get update in order to get cmake to install. See this

image: gcc
before_script:
 - apt-get update --yes
 - apt-get install --yes cmake

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

In general, you can figure stuff out by jumping into the docker image to debug (in your case the image is the debian-based gcc:latest):

sudo docker run -it --rm gcc

If you had run your original apt-get install command inside the gcc container, you would have seen following error message that you could have then googled to figure out that apt-get update was needed

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

As this blog post mentions, you can do a test run locally by downloading the gitlab-runner executable:

gitlab-runner exec docker build

Running the gitlab-runner locally will have gitlab clone your repo and run through all the steps in the .gitlab-ci.yml and you can see the output and debug locally rather quickly.

Upvotes: 6

Related Questions