/** * Convenience wrapper method around {@link #schedule2(Task, int, List)} */ public @Nonnull ScheduleResult schedule2(Task p, int quietPeriod, Action... actions) { return schedule2(p, quietPeriod, Arrays.asList(actions)); }
/** * @deprecated as of 1.521 * Use {@link #schedule2(Task, int, List)} */ @Deprecated public WaitingItem schedule(Task p, int quietPeriod, List<Action> actions) { return schedule2(p, quietPeriod, actions).getCreateItem(); }
/** * Convenience wrapper method around {@link #schedule(Task, int, List)} */ public @CheckForNull WaitingItem schedule(Task p, int quietPeriod, Action... actions) { return schedule2(p, quietPeriod, actions).getCreateItem(); }
@CheckForNull Queue.Item scheduleBuild2(int quietPeriod, List<Action> actions) { if (!asJob().isBuildable()) return null; List<Action> queueActions = new ArrayList<Action>(actions); if (isParameterized() && Util.filter(queueActions, ParametersAction.class).isEmpty()) { queueActions.add(new ParametersAction(getDefaultParametersValues())); } return Jenkins.getInstance().getQueue().schedule2(asJob(), quietPeriod, queueActions).getItem(); }
public void buildWithParameters(StaplerRequest req, StaplerResponse rsp, @CheckForNull TimeDuration delay) throws IOException, ServletException { List<ParameterValue> values = new ArrayList<ParameterValue>(); for (ParameterDefinition d: parameterDefinitions) { ParameterValue value = d.createValue(req); if (value != null) { values.add(value); } } if (delay==null) delay=new TimeDuration(TimeUnit.MILLISECONDS.convert(getJob().getQuietPeriod(), TimeUnit.SECONDS)); Queue.Item item = Jenkins.getInstance().getQueue().schedule2( getJob(), delay.getTimeInSeconds(), new ParametersAction(values), ParameterizedJobMixIn.getBuildCause(getJob(), req)).getItem(); if (item != null) { rsp.sendRedirect(SC_CREATED, req.getContextPath() + '/' + item.getUrl()); } else { rsp.sendRedirect("."); } }
/** * Standard implementation of {@link ParameterizedJob#doBuild}. */ @SuppressWarnings("deprecation") public final void doBuild(StaplerRequest req, StaplerResponse rsp, @QueryParameter TimeDuration delay) throws IOException, ServletException { if (delay == null) { delay=new TimeDuration(TimeUnit.MILLISECONDS.convert(asJob().getQuietPeriod(), TimeUnit.SECONDS)); } if (!asJob().isBuildable()) { throw HttpResponses.error(SC_CONFLICT, new IOException(asJob().getFullName() + " is not buildable")); } // if a build is parameterized, let that take over ParametersDefinitionProperty pp = asJob().getProperty(ParametersDefinitionProperty.class); if (pp != null && !req.getMethod().equals("POST")) { // show the parameter entry form. req.getView(pp, "index.jelly").forward(req, rsp); return; } hudson.model.BuildAuthorizationToken.checkPermission(asJob(), asJob().getAuthToken(), req, rsp); if (pp != null) { pp._doBuild(req, rsp, delay); return; } Queue.Item item = Jenkins.getInstance().getQueue().schedule2(asJob(), delay.getTimeInSeconds(), getBuildCause(asJob(), req)).getItem(); if (item != null) { rsp.sendRedirect(SC_CREATED, req.getContextPath() + '/' + item.getUrl()); } else { rsp.sendRedirect("."); } }
/** * Convenience wrapper method around {@link #schedule2(Task, int, List)} */ public @Nonnull ScheduleResult schedule2(Task p, int quietPeriod, Action... actions) { return schedule2(p, quietPeriod, Arrays.asList(actions)); }
/** * Convenience wrapper method around {@link #schedule(Task, int, List)} */ public @CheckForNull WaitingItem schedule(Task p, int quietPeriod, Action... actions) { return schedule2(p, quietPeriod, actions).getCreateItem(); }
/** * @deprecated as of 1.521 * Use {@link #schedule2(Task, int, List)} */ @Deprecated public WaitingItem schedule(Task p, int quietPeriod, List<Action> actions) { return schedule2(p, quietPeriod, actions).getCreateItem(); }
/** * Duck-types {@link ParameterizedJobMixIn#scheduleBuild2(int, Action...)}. * @param quietPeriod seconds to wait before starting (normally 0) * @param actions various actions to associate with the scheduling, such as {@link ParametersAction} or * {@link CauseAction} * @return a handle by which you may wait for the build to complete (or just start); or null if the build was not * actually scheduled for some reason */ @CheckForNull public Queue.Item scheduleBuild2(int quietPeriod, Action... actions) { if (!isBuildable()) { return null; } return Queue.getInstance().schedule2(this, quietPeriod, Arrays.asList(actions)).getItem(); }
/** * Duck-types {@link ParameterizedJobMixIn#scheduleBuild2(int, Action...)}. * @param quietPeriod seconds to wait before starting (normally 0) * @param actions various actions to associate with the scheduling, such as {@link ParametersAction} or * {@link CauseAction} * @return a handle by which you may wait for the build to complete (or just start); or null if the build was not * actually scheduled for some reason */ @CheckForNull public Queue.Item scheduleBuild2(int quietPeriod, Action... actions) { if (!isBuildable()) { return null; } Jenkins j = Jenkins.getInstance(); if (j == null) { return null; } return j.getQueue().schedule2(this, quietPeriod, Arrays.asList(actions)).getItem(); }
@CheckForNull Queue.Item scheduleBuild2(int quietPeriod, List<Action> actions) { if (!asJob().isBuildable()) return null; List<Action> queueActions = new ArrayList<Action>(actions); if (isParameterized() && Util.filter(queueActions, ParametersAction.class).isEmpty()) { queueActions.add(new ParametersAction(getDefaultParametersValues())); } return Jenkins.getInstance().getQueue().schedule2(asJob(), quietPeriod, queueActions).getItem(); }
boolean schedule(Cause cause) { if (!asJob().isBuildable()) { return false; } List<Action> queueActions = new LinkedList<Action>(); queueActions.add(new ParametersAction(getParameterValues())); queueActions.add(new CauseAction(cause)); int quiet = Math.max(MIN_QUIET, asJob().getQuietPeriod()); final Jenkins jenkins = Jenkins.getInstance(); if (jenkins == null) { logger.log(Level.WARNING, "Tried to schedule a build while Jenkins was gone."); return false; } final Queue queue = jenkins.getQueue(); if (queue == null) { throw new IllegalStateException("The queue is not initialized?!"); } Queue.Item i = queue.schedule2(asJob(), quiet, queueActions).getItem(); return i != null && i.getFuture() != null; }
/** * Mocks {@link Jenkins#getQueue()} and sets it up to return {@link ScheduleResult#created(Queue.WaitingItem)} on * any calls to {@link Queue#schedule2(Queue.Task, int, List)}. * * @param jenkins the jenkins mock. * @return the mocked queue. */ private static Queue mockQueue(Jenkins jenkins) { Queue queue = PowerMockito.mock(Queue.class); when(jenkins.getQueue()).thenReturn(queue); when(queue.schedule2(any(Queue.Task.class), anyInt(), anyList())).thenAnswer(new Answer<ScheduleResult>() { @Override public ScheduleResult answer(InvocationOnMock invocation) throws Throwable { Object[] arguments = invocation.getArguments(); Queue.WaitingItem i = new Queue.WaitingItem( new GregorianCalendar(), (Queue.Task)arguments[0], (List<Action>)arguments[2]); return ScheduleResult.created(i); } }); return queue; } }
public void buildWithParameters(StaplerRequest req, StaplerResponse rsp, @CheckForNull TimeDuration delay) throws IOException, ServletException { List<ParameterValue> values = new ArrayList<ParameterValue>(); for (ParameterDefinition d: parameterDefinitions) { ParameterValue value = d.createValue(req); if (value != null) { values.add(value); } } if (delay==null) delay=new TimeDuration(getJob().getQuietPeriod()); Queue.Item item = Jenkins.getInstance().getQueue().schedule2( getJob(), delay.getTimeInSeconds(), new ParametersAction(values), ParameterizedJobMixIn.getBuildCause(getJob(), req)).getItem(); if (item != null) { rsp.sendRedirect(SC_CREATED, req.getContextPath() + '/' + item.getUrl()); } else { rsp.sendRedirect("."); } }
/** * Tests the schedule method of GerritTrigger. * It verifies that {@link AbstractProject#scheduleBuild2(int, hudson.model.Cause, hudson.model.Action...)} * gets called with an negative buildScheduleDelay -20. */ @Test public void testScheduleWithNoBuildScheduleDelay() { Queue queue = mockJenkinsQueue(); AbstractProject project = mockProject(); mockPluginConfig(0); PatchsetCreated event = Setup.createPatchsetCreated(); final GerritCause gerritCause = spy(new GerritCause(event, true)); GerritTrigger trigger = Setup.createDefaultTrigger(project); Setup.setTrigger(trigger, project); doReturn("http://mock.url").when(gerritCause).getUrl(); trigger.schedule(gerritCause, event); verify(queue).schedule2(same(project), eq(0), hasCauseActionContainingCause(gerritCause)); }
/** * Tests the schedule method of GerritTrigger. * It verifies that {@link AbstractProject#scheduleBuild2(int, hudson.model.Cause, hudson.model.Action...)} * gets called with an average buildScheduleDelay 20. */ @Test public void testScheduleWithAverageBuildScheduleDelay() { Queue queue = mockJenkinsQueue(); AbstractProject project = mockProject(); mockPluginConfig(20); PatchsetCreated event = Setup.createPatchsetCreated(); final GerritCause gerritCause = spy(new GerritCause(event, true)); GerritTrigger trigger = Setup.createDefaultTrigger(project); Setup.setTrigger(trigger, project); doReturn("http://mock.url").when(gerritCause).getUrl(); trigger.schedule(gerritCause, event); verify(queue).schedule2(same(project), eq(20), hasCauseActionContainingCause(gerritCause)); }
/** * Tests the schedule method of GerritTrigger. * It verifies that {@link AbstractProject#scheduleBuild2(int, hudson.model.Cause, hudson.model.Action...)} * gets called with an negative buildScheduleDelay -20. */ @Test public void testScheduleWithNegativeBuildScheduleDelay() { Queue queue = mockJenkinsQueue(); AbstractProject project = mockProject(); mockPluginConfig(-20); PatchsetCreated event = Setup.createPatchsetCreated(); final GerritCause gerritCause = spy(new GerritCause(event, true)); GerritTrigger trigger = Setup.createDefaultTrigger(project); Setup.setTrigger(trigger, project); doReturn("http://mock.url").when(gerritCause).getUrl(); trigger.schedule(gerritCause, event); verify(queue).schedule2(same(project), eq(0), hasCauseActionContainingCause(gerritCause)); }
/** * Tests the schedule method of GerritTrigger. * It verifies that {@link AbstractProject#scheduleBuild2(int, hudson.model.Cause, hudson.model.Action...)} * gets called with an negative buildScheduleDelay 10000. */ @Test public void testScheduleWithMaximumBuildScheduleDelay() { Queue queue = mockJenkinsQueue(); AbstractProject project = mockProject(); mockPluginConfig(10000); PatchsetCreated event = Setup.createPatchsetCreated(); final GerritCause gerritCause = spy(new GerritCause(event, true)); GerritTrigger trigger = Setup.createDefaultTrigger(project); Setup.setTrigger(trigger, project); doReturn("http://mock.url").when(gerritCause).getUrl(); trigger.schedule(gerritCause, event); verify(queue).schedule2(same(project), eq(10000), hasCauseActionContainingCause(gerritCause)); }
protected JSONObject innerPerform(final Job job, final BuildableItem buildableItem, final TimeDuration delay, final List<Action> extraActions) { final JSONObject result = new JSONObject(); final Jenkins jenkins = Jenkins.getActiveInstance(); final Queue queue = jenkins.getQueue(); final Cause cause = new Cause.UserIdCause(); final CauseAction causeAction = new CauseAction(cause); final Action[] actionArray = ActionHelper.create(extraActions, causeAction); for (Action a : extraActions) { if (a instanceof TeamPullRequestMergedDetailsAction) { cancelPreviousPullRequestBuilds(job, (TeamPullRequestMergedDetailsAction) a, queue); } } final ScheduleResult scheduleResult = queue.schedule2(buildableItem, delay.getTime(), actionArray); final Queue.Item item = scheduleResult.getItem(); if (item != null) { result.put("created", jenkins.getRootUrl() + item.getUrl()); } return result; }