diff --git a/echo-pipelinetriggers/src/main/java/com/netflix/spinnaker/echo/pipelinetriggers/orca/PipelineInitiator.java b/echo-pipelinetriggers/src/main/java/com/netflix/spinnaker/echo/pipelinetriggers/orca/PipelineInitiator.java index 2506fa430..3fbec2ff9 100644 --- a/echo-pipelinetriggers/src/main/java/com/netflix/spinnaker/echo/pipelinetriggers/orca/PipelineInitiator.java +++ b/echo-pipelinetriggers/src/main/java/com/netflix/spinnaker/echo/pipelinetriggers/orca/PipelineInitiator.java @@ -44,6 +44,7 @@ import retrofit.RetrofitError; import retrofit.RetrofitError.Kind; import retrofit.client.Response; +import retrofit.mime.TypedByteArray; import rx.Observable; import rx.functions.Func1; @@ -116,9 +117,21 @@ public void startPipeline(Pipeline pipeline) { pipeline.getTrigger() != null && pipeline.getTrigger().isPropagateAuth(); log.debug("Planning templated pipeline {} before triggering", pipeline.getId()); pipeline = pipeline.withPlan(true); - Map resolvedPipelineMap = - orca.plan(objectMapper.convertValue(pipeline, Map.class), true); - pipeline = objectMapper.convertValue(resolvedPipelineMap, Pipeline.class); + + try { + Map resolvedPipelineMap = + orca.plan(objectMapper.convertValue(pipeline, Map.class), true); + pipeline = objectMapper.convertValue(resolvedPipelineMap, Pipeline.class); + } catch (RetrofitError e) { + log.warn( + "Pipeline planning failed: \n{}", + new String(((TypedByteArray) e.getResponse().getBody()).getBytes())); + // Continue anyway, so that the execution will appear in Deck + pipeline = pipeline.withPlan(false); + if (pipeline.getStages() == null) { + pipeline = pipeline.withStages(Collections.emptyList()); + } + } if (propagateAuth) { pipeline = pipeline.withTrigger(pipeline.getTrigger().atPropagateAuth(true)); } @@ -162,7 +175,7 @@ private void triggerPipeline(Pipeline pipeline) throws Exception { } korkUser.setAllowedAccounts(getAllowedAccountsForUser(korkUser.getEmail())); } - AuthenticatedRequest.propagate(() -> orcaResponse.subscribe(), korkUser).call(); + AuthenticatedRequest.propagate(orcaResponse::subscribe, korkUser).call(); } }