diff --git a/polkadot/.gitlab-ci.yml b/polkadot/.gitlab-ci.yml
index 52470bc1e7ef78ca41544067ddae5017ef61b0a1..64b1b2f92733a1371e117740d8bf34235619864c 100644
--- a/polkadot/.gitlab-ci.yml
+++ b/polkadot/.gitlab-ci.yml
@@ -15,6 +15,7 @@
 # moment of time.
 
 stages:
+  - .pre
   - weights
   - check
   - test
@@ -185,6 +186,23 @@ default:
   after_script:
     - buildah logout --all
 
+#### stage:                       .pre
+
+# By default our pipelines are interruptible, but some special pipelines shouldn't be interrupted:
+# * multi-project pipelines such as the ones triggered by the scripts repo
+#
+# In those cases, we add an uninterruptible .pre job; once that one has started,
+# the entire pipeline becomes uninterruptible.
+uninterruptible-pipeline:
+  extends: .kubernetes-env
+  variables:
+    CI_IMAGE: "paritytech/tools:latest"
+  stage: .pre
+  interruptible: false
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "pipeline"
+  script: "true"
+
 include:
   # weights jobs
   - scripts/ci/gitlab/pipeline/weights.yml