Raise ExitEarlyException instead of SystemExit

Raise ExitEarlyException instead of calling sys.exit to exit early
finished stages.

BUG=chromium:610543
TEST=run_tests

Change-Id: Ib36fb76d7822ff2d7e42f6d4001de7c1de601a45
Reviewed-on: https://chromium-review.googlesource.com/347053
Commit-Ready: Ningning Xia <nxia@chromium.org>
Tested-by: Ningning Xia <nxia@chromium.org>
Reviewed-by: Chris Sosa <sosa@chromium.org>
diff --git a/scripts/cbuildbot.py b/scripts/cbuildbot.py
index aa0acb2..5baad64 100644
--- a/scripts/cbuildbot.py
+++ b/scripts/cbuildbot.py
@@ -30,6 +30,7 @@
 from chromite.cbuildbot import topology
 from chromite.cbuildbot import tree_status
 from chromite.cbuildbot import trybot_patch_pool
+from chromite.cbuildbot import failures_lib
 from chromite.cbuildbot.stages import completion_stages
 from chromite.lib import cidb
 from chromite.lib import cgroups
@@ -1272,5 +1273,8 @@
     if options.timeout > 0:
       stack.Add(timeout_util.FatalTimeout, options.timeout,
                 timeout_display_message)
-
-    _RunBuildStagesWrapper(options, site_config, build_config)
+    try:
+      _RunBuildStagesWrapper(options, site_config, build_config)
+    except failures_lib.ExitEarlyException as ex:
+      # This build finished successfully. Do not re-raise ExitEarlyException.
+      logging.info('One stage exited early: %s', ex)