diff --git a/buildkite/pipelines/bazelci.py b/buildkite/pipelines/bazelci.py
index 97ef0c4..eb8c8ed 100644
--- a/buildkite/pipelines/bazelci.py
+++ b/buildkite/pipelines/bazelci.py
@@ -47,7 +47,7 @@
         cleanup(bazel_binary)
 
 def clone_repository(git_repository):
-    run_command(["git", "clone", git_repository, "downstream-repo"])
+    fail_if_nonzero(run_command(["git", "clone", git_repository, "downstream-repo"]))
     os.chdir("downstream-repo")
 
 def delete_repository(git_repository):
@@ -59,31 +59,34 @@
         return
     print("--- Shell Commands")
     shell_command = "\n".join(commands)
-    run_command(shell_command, shell=True)
+    fail_if_nonzero(run_command([shell_command], shell=True))
 
 def bazel_run(bazel_binary, targets):
     if not targets:
         return
     print("--- Run Targets")
     for target in targets:
-        run_command([bazel_binary, "run", target])
+        fail_if_nonzero(run_command([bazel_binary, "run", target]))
 
 def bazel_build(bazel_binary, flags, targets):
     if not targets:
         return
     print("+++ Build")
-    run_command([bazel_binary, "build", "--color=yes"] + flags + targets)
+    fail_if_nonzero(run_command([bazel_binary, "build", "--color=yes"] + flags + targets))
 
 def bazel_test(bazel_binary, flags, targets):
     if not targets:
         return
     print("+++ Test")
-    res = subprocess.run([bazel_binary, "test", "--color=yes", "--build_event_json_file=" + BEP_OUTPUT_FILENAME] + flags + targets)
-    return res.returncode
+    return fail_if_nonzero(run_command([bazel_binary, "test", "--color=yes", "--build_event_json_file=" + BEP_OUTPUT_FILENAME] + flags + targets))
+
+def fail_if_nonzero(exitcode):
+    if exitcode is not 0:
+        exit(exitcode)
 
 def upload_failed_test_logs(bep_path):
     for logfile in failed_test_logs(bep_path):
-        run_command(["buildkite-agent", "artifact", "upload", logfile])
+        fail_if_nonzero(fail_if_nonzero(run_command(["buildkite-agent", "artifact", "upload", logfile])))
 
 def failed_test_logs(bep_path):
     test_logs = []
@@ -117,7 +120,7 @@
 def cleanup(bazel_binary):
     print("--- Cleanup")
     if os.path.exists("WORKSPACE"):
-        run_command([bazel_binary, "clean", "--expunge"])
+        fail_if_nonzero(run_command([bazel_binary, "clean", "--expunge"]))
     if os.path.exists(OUTPUT_DIRECTORY):
         shutil.rmtree(OUTPUT_DIRECTORY)
     if os.path.exists("downstream-repo"):
@@ -126,8 +129,7 @@
 def run_command(args, shell=False):
     print(" ".join(args))
     res = subprocess.run(args, shell=shell)
-    if res.returncode != 0:
-        exit(res.returncode)
+    return res.returncode
 
 def generate_pipeline(configs, http_config):
     if not configs:
