diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7733c965228bfe348c6e5391afbec1cb487856d6..0573da00b1b520e2d5a8f25164e94a78be9fe2db 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -16,20 +16,32 @@ node_install:
     paths:
       - node_modules
 
+dev_node_install:
+  stage: deps
+  script:
+    - npm ci
+  artifacts:
+    paths:
+      - node_modules
+
 check_format:
   stage: check
+  dependencies:
+    - dev_node_install
   script:
-    - npm ci
     - npx prettier --ignore-path .gitignore --check "**/*.{html,js,json,md}"
 
 lint:
   stage: check
+  dependencies:
+    - dev_node_install
   script:
-    - npm ci
     - npx eslint --ignore-path .gitignore "**/*.js"
 
 backend_build:
   stage: build
+  dependencies:
+    - node_install
   script:
     - npm run build
   artifacts:
@@ -38,12 +50,16 @@ backend_build:
 
 backend_test:
   stage: test
+  dependencies:
+    - dev_node_install
   script:
-    - npm ci
     - npm test
 
 deploy:
   stage: deploy
+  dependencies:
+    - node_install
+    - backend_build
   only:
     - master
   script: