diff --git a/src/main/java/org/jenkinsci/plugins/workflow/cps/replay/ReplayAction.java b/src/main/java/org/jenkinsci/plugins/workflow/cps/replay/ReplayAction.java index a46920749..acbef76d6 100644 --- a/src/main/java/org/jenkinsci/plugins/workflow/cps/replay/ReplayAction.java +++ b/src/main/java/org/jenkinsci/plugins/workflow/cps/replay/ReplayAction.java @@ -256,18 +256,39 @@ public void doRebuild(StaplerRequest req, StaplerResponse rsp) throws ServletExc */ public @CheckForNull Queue.Item run2(@Nonnull String replacementMainScript, @Nonnull Map replacementLoadedScripts) { List actions = new ArrayList<>(); + List causes = new ArrayList<>(); + CpsFlowExecution execution = getExecutionBlocking(); if (execution == null) { return null; } + + causes.add(new Cause.UserIdCause()); + causes.add(new ReplayCause(run)); + causes.addAll(extractCauses(run)); + actions.add(new ReplayFlowFactoryAction(replacementMainScript, replacementLoadedScripts, execution.isSandbox())); - actions.add(new CauseAction(new Cause.UserIdCause(), new ReplayCause(run))); + actions.add(new CauseAction(causes)); for (Class c : COPIED_ACTIONS) { actions.addAll(run.getActions(c)); } + return ParameterizedJobMixIn.scheduleBuild2(run.getParent(), 0, actions.toArray(new Action[actions.size()])); } + private List extractCauses(Run original) { + List originalBuildCauses = new ArrayList(original.getCauses()); + + List newBuildCauses = new ArrayList(); + for (Cause buildCause : originalBuildCauses) { + if (!(buildCause instanceof Cause.UserIdCause)) { + newBuildCauses.add(buildCause); + } + } + + return newBuildCauses; + } + /** * Finds a set of Groovy class names which are eligible for replacement. * @param execution the associated execution