private void filterConfigurations( final MatrixBuildExecution execution, final Collection<MatrixConfiguration> touchStoneConfigurations, final Collection<MatrixConfiguration> delayedConfigurations ) throws AbortException { final MatrixBuild build = execution.getBuild(); final FilterScript combinationFilter = FilterScript.parse(execution.getProject().getCombinationFilter(), FilterScript.ACCEPT_ALL); final FilterScript touchStoneFilter = FilterScript.parse(getTouchStoneCombinationFilter(), FilterScript.REJECT_ALL); try { for (MatrixConfiguration c: execution.getActiveConfigurations()) { if (!MatrixBuildListener.buildConfiguration(build, c)) continue; // skip rebuild final Combination combination = c.getCombination(); if (touchStoneFilter != null && touchStoneFilter.apply(execution, combination)) { touchStoneConfigurations.add(c); } else if (combinationFilter.apply(execution, combination)) { delayedConfigurations.add(c); } } } catch (GroovyRuntimeException ex) { PrintStream logger = execution.getListener().getLogger(); logger.println(ex.getMessage()); ex.printStackTrace(logger); throw new AbortException("Failed executing combination filter"); } }
protected Result doRun(BuildListener listener) throws Exception { MatrixProject p = getProject(); PrintStream logger = listener.getLogger(); listUpAggregators(p.getPublishers().values()); listUpAggregators(p.getProperties().values()); listUpAggregators(p.getBuildWrappers().values()); listUpAggregators(ExtensionList.lookup(MatrixAggregatable.class)); for (Item i : q.getItems(c)) { ParentBuildAction a = i.getAction(ParentBuildAction.class); if (a!=null && a.getMatrixBuild()==getBuild()) { q.cancel(i); logger.println(Messages.MatrixBuild_Cancelled(ModelHyperlinkNote.encodeTo(c)));
); if (notifyStartBuild(execution.getAggregators())) return Result.FAILURE; scheduleConfigurationBuild(execution, c); PrintStream logger = execution.getListener().getLogger(); scheduleConfigurationBuild(execution, c); MatrixRun run = waitForCompletion(execution, c); notifyEndBuild(run,execution.getAggregators()); logger.println(Messages.MatrixBuild_Completed(ModelHyperlinkNote.encodeTo(c), getResult(run))); r = r.combine(getResult(run)); scheduleConfigurationBuild(execution, c); MatrixRun run = waitForCompletion(execution, c); notifyEndBuild(run,execution.getAggregators()); logger.println(Messages.MatrixBuild_Completed(ModelHyperlinkNote.encodeTo(c), getResult(run))); r = r.combine(getResult(run));
private MatrixRun waitForCompletion(MatrixBuildExecution exec, MatrixConfiguration c) throws InterruptedException, IOException { BuildListener listener = exec.getListener(); String whyInQueue = ""; long startTime = System.currentTimeMillis(); MatrixRun b = c.getBuildByNumber(exec.getBuild().getNumber());
/** Function to start schedule a single configuration * * This function schedule a build of a configuration passing all of the Matrixchild actions * that are present in the parent build. * * @param exec Matrix build that is the parent of the configuration * @param c Configuration to schedule */ private void scheduleConfigurationBuild(MatrixBuildExecution exec, MatrixConfiguration c) { MatrixBuild build = exec.getBuild(); exec.getListener().getLogger().println(Messages.MatrixBuild_Triggering(ModelHyperlinkNote.encodeTo(c))); // filter the parent actions for those that can be passed to the individual jobs. List<Action> childActions = new ArrayList<Action>(build.getActions(MatrixChildAction.class)); childActions.addAll(build.getActions(ParametersAction.class)); // used to implement MatrixChildAction c.scheduleBuild(childActions, new UpstreamCause((Run)build)); }
public Result run(MatrixBuildExecution execution) throws InterruptedException, IOException { return run(execution.getBuild(), execution.getAggregators(), execution.getListener()); }
@Override public void run() { execute(new MatrixBuildExecution()); }
private Binding getConfiguredBinding(final MatrixBuildExecution execution) { final Binding binding = new Binding(); final ParametersAction parameters = execution.getBuild().getAction(ParametersAction.class); if (parameters == null) return binding; for (final ParameterValue pv: parameters) { if (pv == null) continue; final String name = pv.getName(); final String value = pv.createVariableResolver(execution.getBuild()).resolve(name); binding.setVariable(name, value); } return binding; }
/** * Applies the filter to the specified combination in the context of {@code context}. */ public final boolean apply(MatrixBuildExecution context, Combination combination) { return apply(context.getProject().getAxes(), combination, getConfiguredBinding(context)); }