diff --git a/scripts/fullbuildpipeline.py b/scripts/fullbuildpipeline.py
index 2c0737cebbb644317999458c2a168aec7a605280..b82d75017f598bf61b5434361e889940123b7172 100755
--- a/scripts/fullbuildpipeline.py
+++ b/scripts/fullbuildpipeline.py
@@ -11,9 +11,12 @@ class FullBuildPipeline:
         self.project = project
         self.commit_sha = commit_sha
         self.upstream_pipeline = self.__get_upstream_pipeline()
-        self.build_pipelines = self.__get_build_pipelines()
 
-    def __get_upstream_pipeline(self) -> ProjectPipeline:
+        self.build_pipelines = None
+        if self.upstream_pipeline:
+            self.build_pipelines = self.__get_build_pipelines()
+
+    def __get_upstream_pipeline(self, retry=1) -> ProjectPipeline:
         """
         Get upstream (main) pipeline for the specified commit in the repository.
 
@@ -26,7 +29,7 @@ class FullBuildPipeline:
         )
 
         if not pipelines_for_commit:
-            return {}
+            return None
 
         # For the main branch we have two types of pipelines: short and full.
         # The short one just retriggers the full pipeline and does not contain any artifacts.
@@ -39,6 +42,12 @@ class FullBuildPipeline:
             if p.source != "push":
                 build_pipeline = p
 
+        # If the previous pipeline was canceled and a new one has not yet been created,
+        # wait for 10 seconds and then try again.
+        if build_pipeline.status == "canceled" and retry:
+            time.sleep(10)
+            return self.__get_upstream_pipeline(retry=0)
+
         return build_pipeline
 
     def __get_build_pipelines(self) -> dict[str, tuple[ProjectPipelineJob]]:
@@ -104,7 +113,8 @@ class FullBuildPipeline:
             try:
                 jobs = self.build_pipelines[pipeline_name]
             except KeyError:
-                return None
+                print(f"Failed to get build jobs for '{pipeline_name}' pipeline")
+                return ()
 
         for job in jobs:
             if fnmatch.fnmatch(job.name, job_filter):
diff --git a/scripts/handle_artifacts.py b/scripts/handle_artifacts.py
index dea6ea456c1d1e4eaecbf373da0181227b90063f..56cd75afd09e00f0b21ad7ed77b00dc263eec6f4 100755
--- a/scripts/handle_artifacts.py
+++ b/scripts/handle_artifacts.py
@@ -60,10 +60,10 @@ def main():
 
     latest_successful_build_sha = None
     for commit in manifest_commits:
-        if (
-            FullBuildPipeline(manifest_project, commit.id).upstream_pipeline.status
-            != "success"
-        ):
+        pipeline = FullBuildPipeline(manifest_project, commit.id)
+        if not pipeline.upstream_pipeline:
+            continue
+        if pipeline.upstream_pipeline.status != "success":
             continue
         else:
             latest_successful_build_sha = commit.id
@@ -88,7 +88,11 @@ def main():
 
     for commit in manifest_commits:
         full_build_pipeline = FullBuildPipeline(manifest_project, commit.id)
+        if not full_build_pipeline.upstream_pipeline:
+            continue
+
         print(f"Full pipeline: {full_build_pipeline.upstream_pipeline}")
+
         for pipelinejob in full_build_pipeline.get_jobs():
 
             if pipelinejob.status != "success":