getJob(), delay.getTimeInSeconds(), new ParametersAction(values), new CauseAction(new Cause.UserIdCause())); if (item!=null) { String url = formData.optString("redirectTo");
/** * For use in projects that want initiate a replay via the Java API. * * @param replacementMainScript main script; replacement for {@link #getOriginalScript} * @param replacementLoadedScripts auxiliary scripts, keyed by class name; replacement for {@link #getOriginalLoadedScripts} * @return build queue item */ public @CheckForNull Queue.Item run2(@Nonnull String replacementMainScript, @Nonnull Map<String,String> replacementLoadedScripts) { List<Action> actions = new ArrayList<Action>(); CpsFlowExecution execution = getExecutionBlocking(); if (execution == null) { return null; } actions.add(new ReplayFlowFactoryAction(replacementMainScript, replacementLoadedScripts, execution.isSandbox())); actions.add(new CauseAction(new Cause.UserIdCause(), new ReplayCause(run))); for (Class<? extends Action> c : COPIED_ACTIONS) { actions.addAll(run.getActions(c)); } return ParameterizedJobMixIn.scheduleBuild2(run.getParent(), 0, actions.toArray(new Action[actions.size()])); }
@Override public void triggerRebuild(String projectName, String buildId) { AbstractProject project = ProjectUtil.getProject(projectName, Jenkins.getInstance()); if (!project.hasPermission(Item.BUILD)) { throw new BadCredentialsException("Not authorized to trigger build"); } AbstractBuild build = project.getBuildByNumber(Integer.parseInt(buildId)); @SuppressWarnings("unchecked") List<Cause> prevCauses = build.getCauses(); List<Cause> newCauses = new ArrayList<>(); for (Cause cause : prevCauses) { if (!(cause instanceof Cause.UserIdCause)) { newCauses.add(cause); } } newCauses.add(new Cause.UserIdCause()); CauseAction causeAction = new CauseAction(newCauses); project.scheduleBuild2(project.getQuietPeriod(), (Cause) null, causeAction, build.getAction(ParametersAction.class)); }
/** * Test that multiple repository URLs are all polled. */ @Issue("JENKINS-7461") @Test public void multipleRepositories() throws Exception { // fetch the current workspaces FreeStyleProject p = r.createFreeStyleProject(); String svnBase = "file://" + new CopyExisting(getClass().getResource("/svn-repo.zip")).allocate().toURI().toURL().getPath(); SubversionSCM scm = new SubversionSCM( Arrays.asList(new ModuleLocation(svnBase + "trunk", "trunk")), new UpdateUpdater(), null, null, null, null, null, null); p.setScm(scm); Run r1 = p.scheduleBuild2(0, new Cause.UserIdCause()).get(); r.assertLogContains("Cleaning local Directory trunk", r1); scm = new SubversionSCM( Arrays.asList(new ModuleLocation(svnBase + "trunk", "trunk"), new ModuleLocation(svnBase + "branches", "branches")), new UpdateUpdater(), null, null, null, null, null, null); p.setScm(scm); Run r2 = p.scheduleBuild2(0, new Cause.UserIdCause()).get(); r.assertLogContains("Updating " + svnBase + "trunk", r2); r.assertLogContains("Cleaning local Directory branches", r2); }
@Issue("JENKINS-22568") @Test @Ignore("TODO use docker-fixtures for a reproducible test case") public void pollingWithDefaultParametersWithCurlyBraces() throws Exception { FreeStyleProject p = r.createFreeStyleProject(); String repo = "https://svn.jenkins-ci.org/"; String path = "trunk/hudson/test-projects/trivial-ant/"; p.setScm(new SubversionSCM("${REPO}" + path)); ParametersDefinitionProperty property = new ParametersDefinitionProperty(new StringParameterDefinition("REPO", repo)); p.addProperty(property); FreeStyleBuild b = p.scheduleBuild2(0, new Cause.UserIdCause(), new ParametersAction(new StringParameterValue("REPO", repo))).get(); r.assertBuildStatus(Result.SUCCESS,b); assertTrue(b.getWorkspace().child("build.xml").exists()); // as a baseline, this shouldn't detect any change TaskListener listener = r.createTaskListener(); PollingResult poll = p.poll(listener); assertFalse("Polling shouldn't have any changes.", poll.hasChanges()); }
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; }
/** * Makes sure the symbolic link is checked out correctly. There seems to be */ @Issue("JENKINS-3904") @Test public void symbolicLinkCheckout() throws Exception { // Only perform if symlink behavior is enabled if (!"true".equals(System.getProperty("svnkit.symlinks"))) { return; } FreeStyleProject p = r.createFreeStyleProject(); p.setScm(new SubversionSCM("https://svn.jenkins-ci.org/trunk/hudson/test-projects/issue-3904")); FreeStyleBuild b = p.scheduleBuild2(0, new Cause.UserIdCause()).get(); File source = new File(b.getWorkspace().getRemote() + "/readme.txt"); File linked = new File(b.getWorkspace().getRemote() + "/linked.txt"); assertEquals("Files '" + source + "' and '" + linked + "' are not identical from user view.", readFileAsString(source), readFileAsString(linked)); }
/** * Tests a checkout with RevisionParameterAction */ @Test @Ignore("TODO use docker-fixtures for a reproducible test case") public void revisionParameter() throws Exception { FreeStyleProject p = r.createFreeStyleProject(); String url = "https://svn.jenkins-ci.org/trunk/hudson/test-projects/trivial-ant"; p.setScm(new SubversionSCM(url)); FreeStyleBuild b = p.scheduleBuild2(0, new Cause.UserIdCause(), new RevisionParameterAction(new SubversionSCM.SvnInfo(url, 13000))).get(); System.out.println(b.getLog(LOG_LIMIT)); r.assertLogContains("at revision 13000", b); r.assertBuildStatus(Result.SUCCESS,b); }
@Issue("JENKINS-46894") @Test public void BuildStatusWhenWithUserIdCauseShouldBeSkipped() throws Exception { WorkflowJob p = j.jenkins.createProject(WorkflowJob.class, "buildStatusWhenUserIdCauseSkipped"); p.setDefinition(new CpsFlowDefinition(pipelineSourceFromResources("buildStatusWhenUserIdCause"), true)); // get the build going, and wait until workflow pauses WorkflowRun b = p.scheduleBuild2(0, new CauseAction(new UserIdCause("virginia")) ).getStartCondition().get(); j.waitForCompletion(b); j.assertLogContains("Stage \"Two\" skipped due to when conditional",b); j.assertLogNotContains("World", b); j.assertLogNotContains("Heal it", b); } @Issue("JENKINS-46894")
@Test @Ignore("TODO use docker-fixtures for a reproducible test case") public void revisionParameterFolding() throws Exception { FreeStyleProject p = r.createFreeStyleProject(); String url = "https://svn.jenkins-ci.org/trunk/hudson/test-projects/trivial-ant"; p.setScm(new SubversionSCM(url)); // Schedule build of a specific revision with a quiet period Future<FreeStyleBuild> f = p.scheduleBuild2(60, new Cause.UserIdCause(), new RevisionParameterAction(new SubversionSCM.SvnInfo(url, 13000))); // Schedule another build at a more recent revision p.scheduleBuild2(0, new Cause.UserIdCause(), new RevisionParameterAction(new SubversionSCM.SvnInfo(url, 14000))); FreeStyleBuild b = f.get(); System.out.println(b.getLog(LOG_LIMIT)); r.assertLogContains("at revision 14000", b); r.assertBuildStatus(Result.SUCCESS,b); }
/** * Form submission is calling this method */ @SuppressWarnings({"UnusedDeclaration"}) public void doSubmit(StaplerRequest req, StaplerResponse resp) throws IOException, ServletException { // Enforce release permissions project.checkPermission(ArtifactoryPlugin.RELEASE); readRequestParams(req, false); // Schedule release build if (project.scheduleBuild(0, new Cause.UserIdCause(), this)) { // Redirect to the project page resp.sendRedirect(project.getAbsoluteUrl()); } }
/** * Tests the "URL@HEAD" format in the SVN URL */ @Test public void headRevisionCheckout() throws Exception { File testRepo = new CopyExisting(getClass().getResource("two-revisions.zip")).allocate(); SubversionSCM scm = new SubversionSCM("file://" + testRepo.toURI().toURL().getPath() + "@HEAD"); FreeStyleProject p = r.createFreeStyleProject(); p.setScm(scm); FreeStyleBuild b = p.scheduleBuild2(0, new Cause.UserIdCause()).get(); System.out.println(b.getLog(LOG_LIMIT)); r.assertLogContains("At revision 2", b); r.assertBuildStatus(Result.SUCCESS,b); }
/** * Computes the build cause, using RemoteCause or UserCause as appropriate. */ @Restricted(NoExternalUse.class) public static final CauseAction getBuildCause(ParameterizedJob job, StaplerRequest req) { Cause cause; @SuppressWarnings("deprecation") hudson.model.BuildAuthorizationToken authToken = job.getAuthToken(); if (authToken != null && authToken.getToken() != null && req.getParameter("token") != null) { // Optional additional cause text when starting via token String causeText = req.getParameter("cause"); cause = new Cause.RemoteCause(req.getRemoteAddr(), causeText); } else { cause = new Cause.UserIdCause(); } return new CauseAction(cause); }
@Url("http://hudson.pastebin.com/m3ea34eea") @Test @Ignore("TODO use docker-fixtures for a reproducible test case") public void remoteCheckOut() throws Exception { DumbSlave s = r.createSlave(); FreeStyleProject p = r.createFreeStyleProject(); p.setAssignedLabel(s.getSelfLabel()); p.setScm(new SubversionSCM("https://svn.jenkins-ci.org/trunk/hudson/test-projects/trivial-ant/")); FreeStyleBuild b = r.assertBuildStatusSuccess(p.scheduleBuild2(0, new Cause.UserIdCause()).get()); assertTrue(b.getWorkspace().child("build.xml").exists()); r.assertBuildStatusSuccess(p.scheduleBuild2(0).get()); }
@Email("http://jenkins.361315.n4.nabble.com/Hudson-1-266-and-1-267-Subversion-authentication-broken-td375737.html") @Test @Ignore("TODO use docker-fixtures for a reproducible test case") public void httpsCheckOut() throws Exception { FreeStyleProject p = r.createFreeStyleProject(); p.setScm(new SubversionSCM("https://svn.jenkins-ci.org/trunk/hudson/test-projects/trivial-ant/")); FreeStyleBuild b = r.assertBuildStatusSuccess(p.scheduleBuild2(0, new Cause.UserIdCause()).get()); assertTrue(b.getWorkspace().child("build.xml").exists()); }
@Email("http://jenkins.361315.n4.nabble.com/Hudson-1-266-and-1-267-Subversion-authentication-broken-td375737.html") @Test @Ignore("TODO use docker-fixtures for a reproducible test case") public void httpCheckOut() throws Exception { FreeStyleProject p = r.createFreeStyleProject(); p.setScm(new SubversionSCM("https://svn.jenkins-ci.org/trunk/hudson/test-projects/trivial-maven/src/test/java/test/")); FreeStyleBuild b = r.assertBuildStatusSuccess(p.scheduleBuild2(0, new Cause.UserIdCause()).get()); assertTrue(b.getWorkspace().child("AppTest.java").exists()); }
@Issue("JENKINS-46894") @Test public void BuildStatusWhenWithUserIdCause() throws Exception { WorkflowJob p = j.jenkins.createProject(WorkflowJob.class, "buildStatusWhenUserIdCause"); p.setDefinition(new CpsFlowDefinition(pipelineSourceFromResources("buildStatusWhenUserIdCause"), true)); // get the build going, and wait until workflow pauses WorkflowRun b = p.scheduleBuild2(0, new CauseAction(new UserIdCause("vlinde")) ).getStartCondition().get(); j.waitForCompletion(b); j.assertLogContains("World", b); j.assertLogContains("Heal it", b); }
@RequirePOST public HttpResponse doBuild(@QueryParameter TimeDuration delay) { checkPermission(BUILD); if (!isBuildable()) { throw HttpResponses.error(SC_INTERNAL_SERVER_ERROR, new IOException(getFullName() + " cannot be recomputed")); } scheduleBuild2(delay == null ? 0 : delay.getTimeInSeconds(), new CauseAction(new Cause.UserIdCause())); return HttpResponses.forwardToPreviousPage(); }
@RequirePOST public HttpResponse doBuild(@QueryParameter TimeDuration delay) { checkPermission(BUILD); if (!isBuildable()) { throw HttpResponses.error(SC_INTERNAL_SERVER_ERROR, new IOException(getFullName() + " cannot be recomputed")); } scheduleBuild2(delay == null ? 0 : delay.getTime(), new CauseAction(new Cause.UserIdCause())); return HttpResponses.forwardToPreviousPage(); }
/** * Computes the build cause, using RemoteCause or UserCause as appropriate. */ @Restricted(NoExternalUse.class) public static final CauseAction getBuildCause(ParameterizedJob job, StaplerRequest req) { Cause cause; @SuppressWarnings("deprecation") hudson.model.BuildAuthorizationToken authToken = job.getAuthToken(); if (authToken != null && authToken.getToken() != null && req.getParameter("token") != null) { // Optional additional cause text when starting via token String causeText = req.getParameter("cause"); cause = new Cause.RemoteCause(req.getRemoteAddr(), causeText); } else { cause = new Cause.UserIdCause(); } return new CauseAction(cause); }