diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9c92af4d3c45a19e4b4a572a2c9d493debf66d3b..dd2afbfbf0abcc27b36f88f318e029983d4877f2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -378,7 +378,7 @@ deploy_cheaha:
   only:
     - main
 
-cleanup:
+cleanup_knightly:
   stage: cleanup
   environment:
     name: knightly
@@ -402,5 +402,22 @@ cleanup:
       for img in ${IMAGE_TO_BE_DELETE[@]}; do
         openstack image delete ${img}
       done
-  allow_failure: true
-  when: always
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "schedule"
+      when: always
+
+cleanup_mr:
+  stage: cleanup
+  tags:
+    - build
+  script:
+    - >
+      IMAGE_TO_BE_DELETE=($(openstack image list --sort-column Name --sort-descending -f value -c Name -c ID
+      | awk -v REGEX='(ood|base|compute|gpu)-PR-' '{if ($0 ~ REGEX) print $1}'))
+    - |
+      for img in ${IMAGE_TO_BE_DELETE[@]}; do
+        openstack image delete ${img}
+      done
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
+      when: always