diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 609d101e346b849e94a00cf04bbcfa79969513e6..44c718e279b81a95d22915ced5843f3167dc0195 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -12,13 +12,14 @@ variables:
 
 include:
   # extends
+  - local: '/scripts/ci/extends/build.yml'
   - local: '/scripts/ci/extends/container-maker-setup.yml'
   - local: '/scripts/ci/extends/vs2019-environment.yml'
   - local: '/scripts/ci/extends/test-artifacts.yml'
   # jobs
   - local: '/scripts/ci/jobs/pre-commit.yml'
   - local: '/scripts/ci/jobs/build_image.yml'
-  - local: '/scripts/ci/jobs/build.yml'
+  - local: '/scripts/ci/jobs/build-linux.yml'
   - local: '/scripts/ci/jobs/build-docs.yml'
   - local: '/scripts/ci/jobs/build-win.yml'
   - local: '/scripts/ci/jobs/build-mac.yml'
diff --git a/scripts/ci/jobs/build.yml b/scripts/ci/extends/build.yml
similarity index 64%
rename from scripts/ci/jobs/build.yml
rename to scripts/ci/extends/build.yml
index 7255ae26da39cd0c4a9defe3aa344e1eb3f8168d..5017d2f18ab7690a8854c344c26e351cbd7e40a8 100644
--- a/scripts/ci/jobs/build.yml
+++ b/scripts/ci/extends/build.yml
@@ -1,22 +1,21 @@
-build:
+.build_definition:
   stage: test
+  extends: .test-artifacts
+
   variables:
-    BUILD_DIR: "build"
     CCACHE_DIR: "$CI_PROJECT_DIR/.ccache"
-  image:
-    name: $CONTAINER_GCC_IMAGE
-  cache:
-    paths:
-      - .ccache
-  extends: .test-artifacts
 
   before_script:
     - mkdir -p $BUILD_DIR
     - cd $BUILD_DIR
 
   script:
-    - cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DOGS_USE_CONAN=OFF -DOGS_BUILD_PROCESSES=GroundwaterFlow
+    - cmake .. -G Ninja $CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release -DOGS_BUILD_PROCESSES=GroundwaterFlow
     - cmake --build . > >(tee make.output)
     - cmake --build . --target tests
     - cmake --build . --target ctest
     - cp Testing/**/Test.xml Tests/ctest.xml
+
+  cache:
+    paths:
+      - $CCACHE_DIR
diff --git a/scripts/ci/jobs/build-linux.yml b/scripts/ci/jobs/build-linux.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a883c1541934038993f97910aa78779907a9de3a
--- /dev/null
+++ b/scripts/ci/jobs/build-linux.yml
@@ -0,0 +1,9 @@
+build linux:
+  extends: .build_definition
+
+  variables:
+    BUILD_DIR: "build"
+    CMAKE_ARGS: "-DOGS_USE_CONAN=OFF"
+
+  image:
+    name: $CONTAINER_GCC_IMAGE
diff --git a/scripts/ci/jobs/build-mac.yml b/scripts/ci/jobs/build-mac.yml
index c7f6683dd556972de3dc21d943aa263aeb618cbc..a6b7c80c1549929c5fc10e6cd61a2dc1ec487b7c 100644
--- a/scripts/ci/jobs/build-mac.yml
+++ b/scripts/ci/jobs/build-mac.yml
@@ -1,22 +1,9 @@
 build mac:
-  stage: test
+  extends: .build_definition
+
   tags:
     - mac
+
   variables:
     BUILD_DIR: "build-mac"
     CCACHE_DIR: "$CI_PROJECT_DIR/.ccache"
-  cache:
-    paths:
-      - .ccache
-  extends: .test-artifacts
-
-  before_script:
-    - mkdir -p $BUILD_DIR
-    - cd $BUILD_DIR
-
-  script:
-    - cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DOGS_BUILD_PROCESSES=GroundwaterFlow
-    - cmake --build . > >(tee make.output)
-    - cmake --build . --target tests
-    - cmake --build . --target ctest
-    - cp Testing/**/Test.xml Tests/ctest.xml
diff --git a/scripts/ci/jobs/checks.yml b/scripts/ci/jobs/checks.yml
index 92152a48a9fb7183fecf4cdddae59866967a0158..cc33134319b986521ff772bf4580969faa0c5d44 100644
--- a/scripts/ci/jobs/checks.yml
+++ b/scripts/ci/jobs/checks.yml
@@ -4,7 +4,7 @@ compiler warnings:
     GIT_STRATEGY: none
   allow_failure: true
   dependencies:
-    - build
+    - build linux
     - build win
     - build mac
   script:
@@ -25,7 +25,7 @@ ctest results:
   tags:
     - singularity
   dependencies:
-    - build
+    - build linux
     - build win
     - build mac
   script: