diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh
index 0aa2403d..b643b5a6 100755
--- a/scripts/ci_build.sh
+++ b/scripts/ci_build.sh
@@ -147,4 +147,7 @@ set -x
 
 avocado ${VERBOSE} run "${TESTSUITE_DIR}/citest.py" \
     -t "${TAGS}" --max-parallel-tasks=1 --disable-sysinfo \
-    ${SSTATE} ${TIMEOUT}
+    ${SSTATE} ${TIMEOUT} \
+    || true
+
+python3 ${TESTSUITE_DIR}/cleanup.py
diff --git a/testsuite/cleanup.py b/testsuite/cleanup.py
new file mode 100755
index 00000000..c81397d2
--- /dev/null
+++ b/testsuite/cleanup.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python3
+
+import os
+import pickle
+import signal
+
+build_dir = os.path.join(os.path.dirname(__file__), '..', 'build')
+
+vm_dict_file = f"{build_dir}/vm_dict_file"
+vm_dict = {}
+
+if os.path.isfile(vm_dict_file):
+    with open(vm_dict_file, 'rb') as f:
+        data = f.read()
+        if data:
+            vm_dict = pickle.loads(data)
+
+for vm in vm_dict:
+    pid = vm_dict[vm][0]
+    name = vm_dict[vm][1][0]
+    print(f"Killing {name} process with pid {pid}", end ="... ")
+    try:
+        os.kill(pid, signal.SIGKILL)
+        print("OK")
+    except ProcessLookupError:
+        print("Not found")
