write to tmpdir
diff --git a/buildkite/pipelines/bazelci.py b/buildkite/pipelines/bazelci.py
index 6e3b5b3..3f1847e 100644
--- a/buildkite/pipelines/bazelci.py
+++ b/buildkite/pipelines/bazelci.py
@@ -5,13 +5,11 @@
 import shutil
 import subprocess
 import sys
+import tempfile
 import urllib.request
 from shutil import copyfile
 from urllib.parse import urlparse
 
-OUTPUT_DIRECTORY = ".bazelci_outputs/"
-BEP_OUTPUT_FILENAME = OUTPUT_DIRECTORY + "test.json"
-
 def supported_platforms():
     return {
         "ubuntu1404" : "Ubuntu 14.04",
@@ -28,7 +26,10 @@
         return json.load(reader(resp))
 
 def run(config, platform, bazel_binary, git_repository):
+    exit_code = 0
+    tmpdir = None
     try:
+        tmpdir = tempfile.mkdtemp()
         if git_repository:
             if os.path.exists("downstream-repo"):
                 shutil.rmtree("downstream-repo")
@@ -36,17 +37,19 @@
             cleanup(bazel_binary)
         else:
             cleanup(bazel_binary)
-        os.mkdir(OUTPUT_DIRECTORY)
         shell_commands(config.get("shell_commands", None))
         bazel_run(bazel_binary, config.get("run_targets", None))
         bazel_build(bazel_binary, config.get("build_flags", []), config.get("build_targets", None))
-        exit_code = bazel_test(bazel_binary, config.get("test_flags", []), config.get("test_targets", None))
-        upload_failed_test_logs(BEP_OUTPUT_FILENAME)
+        bep_file = os.path.join(tmpdir, "build_event_json_file.json")
+        exit_code = bazel_test(bazel_binary, config.get("test_flags", []), config.get("test_targets", None), bep_file)
+        upload_failed_test_logs(bep_file, tmpdir)
         if git_repository:
             delete_repository(git_repository)
-        exit(exit_code)
     finally:
+        if tmpdir:
+             os.rmtree(tmpdir)
         cleanup(bazel_binary)
+        exit(exit_code)
 
 def clone_repository(git_repository):
     fail_if_nonzero(run_command(["git", "clone", git_repository, "downstream-repo"]))
@@ -76,24 +79,24 @@
     print("\n+++ Build")
     fail_if_nonzero(run_command([bazel_binary, "build", "--color=yes", "--keep_going"] + flags + targets))
 
-def bazel_test(bazel_binary, flags, targets):
+def bazel_test(bazel_binary, flags, targets, bep_file):
     if not targets:
         return
     print("\n+++ Test")
-    return run_command([bazel_binary, "test", "--color=yes", "--keep_going", "--build_tests_only", "--build_event_json_file=" + BEP_OUTPUT_FILENAME] + flags + targets)
+    return run_command([bazel_binary, "test", "--color=yes", "--keep_going", "--build_tests_only", "--build_event_json_file=" + bep_file] + 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):
-        fail_if_nonzero(fail_if_nonzero(run_command(["buildkite-agent", "artifact", "upload", logfile])))
+def upload_failed_test_logs(bep_file, tmpdir):
+    for logfile in failed_test_logs(bep_file, tmpdir):
+        fail_if_nonzero(run_command(["buildkite-agent", "artifact", "upload", logfile]))
 
-def failed_test_logs(bep_path):
+def failed_test_logs(bep_file, tmpdir):
     test_logs = []
     raw_data = ""
-    with open(bep_path) as f:
+    with open(bep_file) as f:
         raw_data = f.read()
     decoder = json.JSONDecoder()
 
@@ -106,25 +109,23 @@
                 outputs = test_result["testActionOutput"]
                 for output in outputs:
                     if output["name"] == "test.log":
-                        new_path = label_to_path(json_dict["id"]["testResult"]["label"])
+                        new_path = label_to_path(tmpdir, json_dict["id"]["testResult"]["label"])
                         os.makedirs(os.path.dirname(new_path), exist_ok=True)
                         copyfile(urlparse(output["uri"]).path, new_path)
                         test_logs.append(new_path)
         pos += size + 1
     return test_logs
 
-def label_to_path(label):
+def label_to_path(tmpdir, label):
   # remove leading //
   path = label[2:]
   path = path.replace(":", "/")
-  return OUTPUT_DIRECTORY + path + ".log"
+  return os.path.join(tmpdir, path + ".log")
 
 def cleanup(bazel_binary):
     print("\n--- Cleanup")
     if os.path.exists("WORKSPACE"):
         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"):
         shutil.rmtree("downstream-repo")