diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index acd4b7d4ab230fb7df4491e3fc02958fcd74a4ad..4e35f42536da9fc747b85c9616bb5cb32e1f0642 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -30,10 +30,12 @@ build-debian:
         - apt-get update && apt-get install -y libeigen3-dev
         - apt-get update && apt-get install -y ninja-build
         - apt-get update && apt-get install -y petsc-dev
+        - apt-get update && apt-get install -y python3 python3-pip
+        - pip3 install gcovr
         - >
             bash -c '
                 cd $(mktemp -d) &&
-                cmake -G Ninja -DCMAKE_BUILD_TYPE=Release /usr/src/googletest &&
+                cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="--coverage" /usr/src/googletest &&
                 cmake --build . &&
                 cmake --build . --target install &&
                 rm -rf $PWD
@@ -44,7 +46,11 @@ build-debian:
         - chown developer:developer build
         - >
             su developer -c '
-                cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release . &&
+                cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="--coverage" . &&
                 cmake --build build --target all &&
-                CTEST_OUTPUT_ON_FAILURE=1 cmake --build build --target test
+                CTEST_OUTPUT_ON_FAILURE=1 cmake --build build --target test &&
+                python3 -m gcovr --print-summary --sonarqube coverage.xml -j$(nproc) --root . build
             '
+    artifacts:
+        reports:
+            cobertura: coverage.xml