diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..096cb231076cc2384b6450aaa36f460bef2f2c83
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,54 @@
+workflow:
+  rules:
+    - if: '$CI_PIPELINE_SOURCE == "api"'
+    - if: '$CI_PIPELINE_SOURCE == "web"'
+
+stages:
+    - core
+    - extra
+    - final
+
+variables:
+    - "BOB_DOC_GEN_OBJECTS"  # Ensures only the doc-objects jobs are created.
+
+# The core packages
+bob/core:
+    parallel:
+        matrix:
+            - PROJECT: ["bob/bob.io.base", "bob/bob.measure", "bob/bob.learn.em", "bob/bob.pipelines"]
+    stage: core
+    trigger:
+        project: $PROJECT
+        strategy: depend
+
+# The extra packages
+bob/bob.bio:
+    parallel:
+        matrix:
+            - PROJECT: ["bob/bob.bio.base", "bob/bob.bio.face", "bob/bob.bio.vein", "bob/bob.bio.spear", "bob/bob.bio.video"]
+    stage: extra
+    trigger:
+        project: $PROJECT
+        strategy: depend
+
+    needs: ["bob/core"]
+
+bob/bob.pad:
+    parallel:
+        matrix:
+            - PROJECT: ["bob/bob.pad.base", "bob/bob.pad.face"]
+    stage: extra
+    trigger:
+        project: $PROJECT
+        strategy: depend
+
+    needs: ["bob/core"]
+
+bob/bob.fusion.base:
+    stage: extra
+    trigger:
+        project: bob/bob.fusion.base
+        strategy: depend
+
+    needs: ["bob/core"]
+