diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3fe0219fccc602e4f5e509420230630d924dc124..b0e77c43339d4fd929d7b5646cf36c53420e08b1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -11,6 +11,7 @@ variables:
 
 include:
   - local: '/scripts/ci/extends/container-maker-setup.yml'
+  - local: '/scripts/ci/extends/vs2019-environment.yml'
   - local: '/scripts/ci/jobs/pre-commit.yml'
   - local: '/scripts/ci/jobs/build_image.yml'
   - local: '/scripts/ci/jobs/build.yml'
diff --git a/scripts/ci/extends/vs2019-environment.yml b/scripts/ci/extends/vs2019-environment.yml
new file mode 100644
index 0000000000000000000000000000000000000000..94f6326ecc5c7e0d0cc23da1b429ce797795a8bf
--- /dev/null
+++ b/scripts/ci/extends/vs2019-environment.yml
@@ -0,0 +1,13 @@
+.vs2019-environment:
+  before_script:
+    # Load VS environment
+    - |
+      pushd $env:VS160COMNTOOLS
+      cmd /c "VsDevCmd.bat -arch=amd64 -host_arch=amd64&set" |
+      foreach {
+        if ($_ -match "=") {
+          $v = $_.split("="); set-item -force -path "ENV:\$($v[0])"  -value "$($v[1])"
+        }
+      }
+      popd
+      Write-Host "`nVisual Studio Command Prompt variables set." -ForegroundColor Yellow
diff --git a/scripts/ci/jobs/build-win.yml b/scripts/ci/jobs/build-win.yml
index 96edf6cc13930bb0b7193ea06a97de6d92a89328..d9f5b7afa2727253f8862268219ef0d8b14177be 100644
--- a/scripts/ci/jobs/build-win.yml
+++ b/scripts/ci/jobs/build-win.yml
@@ -2,34 +2,32 @@ build win:
   stage: test
   tags:
     - windows
-
-  before_script:
-    # Load VS environment
-    - |
-      pushd $env:VS160COMNTOOLS
-      cmd /c "VsDevCmd.bat -arch=amd64 -host_arch=amd64&set" |
-      foreach {
-        if ($_ -match "=") {
-          $v = $_.split("="); set-item -force -path "ENV:\$($v[0])"  -value "$($v[1])"
-        }
-      }
-      popd
-      Write-Host "`nVisual Studio Command Prompt variables set." -ForegroundColor Yellow
-    - mkdir -p build-win
-    - cd build-win
+  variables:
+    BUILD_DIR: "build-win"
+  extends: .vs2019-environment
 
   script:
-    - cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DOGS_BUILD_PROCESSES=GroundwaterFlow
-    - cmake --build .
+    - mkdir -p $BUILD_DIR
+    - cd $BUILD_DIR
+    - |
+      cmake .. -G Ninja `
+        -DCMAKE_BUILD_TYPE=Release `
+        -DOGS_BUILD_PROCESSES=GroundwaterFlow `
+        -DOGS_USE_PYTHON=ON `
+        -DOGS_BUILD_GUI=ON `
+        -DOGS_BUILD_UTILS=ON `
+        -DOGS_BUILD_SWMM=ON `
+        -DOGS_USE_NETCDF=ON
     - cmake --build . --target tests
     - cmake --build . --target ctest
     - cp Testing/**/Test.xml Tests/ctest.xml
+    - cmake --build .
 
   artifacts:
     paths:
-      - build-win/Tests/ctest.xml
-      - build-win/Tests/testrunner.xml
+      - $BUILD_DIR/Tests/ctest.xml
+      - $BUILD_DIR/Tests/testrunner.xml
     expire_in: 1 week
     reports:
       junit:
-        - build-win/Tests/testrunner.xml
+        - $BUILD_DIR/Tests/testrunner.xml