ParameterDefinition pd = pdp.getParameterDefinition(name); if (pd==null) { String nearest = EditDistance.findNearest(name, pdp.getParameterDefinitionNames()); throw new CmdLineException(null, nearest == null ? String.format("'%s' is not a valid parameter.", name) : for(ParameterDefinition pd : pdp.getParameterDefinitions()) { if (parameters.containsKey(pd.getName())) continue; a = new ParametersAction(values);
/** * Creates an {@link VariableResolver} that aggregates all the parameters. * * <p> * If you are a {@link BuildStep}, most likely you should call {@link AbstractBuild#getBuildVariableResolver()}. */ public VariableResolver<String> createVariableResolver(AbstractBuild<?,?> build) { VariableResolver[] resolvers = new VariableResolver[getParameters().size()+1]; int i=0; for (ParameterValue p : getParameters()) { if (p == null) continue; resolvers[i++] = p.createVariableResolver(build); } resolvers[i] = build.getBuildVariableResolver(); return new VariableResolver.Union<String>(resolvers); }
@Nonnull public ParametersAction merge(@CheckForNull ParametersAction overrides) { if (overrides == null) { ParametersAction parametersAction = new ParametersAction(parameters, this.safeParameters); return parametersAction; } ParametersAction parametersAction = createUpdated(overrides.parameters); Set<String> safe = new TreeSet<>(); if (parametersAction.safeParameters != null && this.safeParameters != null) { safe.addAll(this.safeParameters); } if (overrides.safeParameters != null) { safe.addAll(overrides.safeParameters); } parametersAction.safeParameters = safe; return parametersAction; }
@Override protected int run() throws Exception { Run r = getCurrentlyBuilding(); r.checkPermission(Run.UPDATE); StringParameterValue p = new StringParameterValue(name, value); ParametersAction a = r.getAction(ParametersAction.class); if (a!=null) { r.replaceAction(a.createUpdated(Collections.singleton(p))); } else { r.addAction(new ParametersAction(p)); } return 0; } }
private boolean notifyReviewboard(BuildListener listener, AbstractBuild<?, ?> build) { listener.getLogger().println("Going to notify reviewboard about " + build.getDisplayName()); ParametersAction paramAction = build.getAction(ParametersAction.class); ParameterValue param = paramAction.getParameter("review.url"); ReviewboardParameterValue rbParam = param instanceof ReviewboardParameterValue ? (ReviewboardParameterValue)param : if (rbParam == null) throw new UnsupportedOperationException("review.url parameter is null or invalid"); String url = rbParam.getLocation(); Result result = build.getResult(); boolean patchFailed = rbParam.isPatchFailed(); boolean success = result.equals(Result.SUCCESS);
@Override public void evaluate() throws Throwable { WorkflowJob p = story.j.jenkins.createProject(WorkflowJob.class, "p"); p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("param", ""))); p.setDefinition(new CpsFlowDefinition("echo \"run with ${param}\"", true)); WorkflowRun b1 = story.j.assertBuildStatusSuccess(p.scheduleBuild2(0, new ParametersAction(new StringParameterValue("param", "some value")))); story.j.assertLogContains("run with some value", b1); // When we replay a parameterized build, we expect the original parameter values to be set. WorkflowRun b2 = (WorkflowRun) b1.getAction(ReplayAction.class).run("echo \"run again with ${param}\"", Collections.<String,String>emptyMap()).get(); story.j.assertLogContains("run again with some value", story.j.assertBuildStatusSuccess(b2)); } });
private String getExpandedRemote(AbstractBuild<?, ?> build) { String outRemote = remote; ParametersAction parameters = build.getAction(ParametersAction.class); if (parameters != null) { outRemote = parameters.substitute(build, remote); } return outRemote; }
EnvVars env = build.getEnvironment(listener); env.overrideAll(build.getBuildVariables()); VariableResolver<String> vr = new VariableResolver.ByMap<String>(env); ParametersAction parameters = build.getAction(ParametersAction.class); for(String param : params) { param = parameters.substitute(build, param);
@Bug(4271) @Test public void parameterizedBuildsBranch() throws Exception { m.hg(repo, "init"); m.touchAndCommit(repo, "trunk"); m.hg(repo, "update", "null"); m.hg(repo, "branch", "b"); m.touchAndCommit(repo, "variant"); FreeStyleProject p = j.createFreeStyleProject(); p.setScm(new MercurialSCM(hgInstallation(), repo.getPath(), "${BRANCH}", null, null, null, false)); // SECURITY-170 - have to use ParametersDefinitionProperty p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("BRANCH", "b"))); String log = m.buildAndCheck(p, "variant", new ParametersAction( new StringParameterValue("BRANCH", "b"))); assertTrue(log, log.contains("--rev b")); assertFalse(log, log.contains("--rev ${BRANCH}")); m.touchAndCommit(repo, "further-variant"); // the following assertion commented out as a part of the fix to // HUDSON-6126 // assertTrue(pollSCMChanges(p)); m.buildAndCheck(p, "further-variant", new ParametersAction( new StringParameterValue("BRANCH", "b"))); }
@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()); }
@Override public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { if (!ReviewboardNotifier.DESCRIPTOR.getDisableAutoApply()) { listener.getLogger().println("Patch already applied. Ignoring"); return true; } listener.getLogger().println("Applying "+ ReviewboardNote.encodeTo("the diff")); ParametersAction paramAction = build.getAction(ParametersAction.class); ParameterValue param = paramAction.getParameter("review.url"); ReviewboardParameterValue rbParam = (ReviewboardParameterValue) param; if (rbParam == null) throw new UnsupportedOperationException("review.url parameter is null or invalid"); FilePath patch = build.getWorkspace().child(ReviewboardParameterValue.LOCATION); try { patch.act(new ReviewboardParameterValue.ApplyTask()); return true; } catch (Exception e) { listener.getLogger().println("Failed to apply patch due to:"); e.printStackTrace(listener.getLogger()); rbParam.setPatchFailed(true); throw new AbortException("Failed to apply patch"); } }
private static ParametersAction getVersionParameterAction(AbstractBuild build, String version) { ParameterValue value = new StringParameterValue(PipelineVersionContributor.VERSION_PARAMETER, version); ParametersAction action = build.getAction(ParametersAction.class); if (action != null) { List<ParameterValue> parameters = new ArrayList<>(action.getParameters()); parameters.add(value); return new ParametersAction(parameters); } return new ParametersAction(value); }
public Action getAction(AbstractBuild<?,?> build, TaskListener listener) throws IOException, InterruptedException { EnvVars env = getEnvironment(build, listener); Properties p = new Properties(); p.load(new StringInputStream(properties)); List<ParameterValue> values = new ArrayList<ParameterValue>(); for (Map.Entry<Object, Object> entry : p.entrySet()) { values.add(new StringParameterValue(entry.getKey().toString(), env.expand(entry.getValue().toString()))); } return new ParametersAction(values); }
private CharSequence getBuildParameters(AbstractBuild<?, ?> build) { ParametersAction parametersAction = build.getAction(ParametersAction.class); if (parametersAction == null) { return ""; } StringBuilder buf = new StringBuilder(); List<ParameterValue> parameters = parametersAction.getParameters(); buf.append("\nParameters:"); for (ParameterValue parameter : parameters) { buf.append("\n"); buf.append(parameter.getShortDescription()); } return buf; }
private static ParametersAction getDefaultParameters(Job<?,?> project) { ParametersDefinitionProperty property = project.getProperty(ParametersDefinitionProperty.class); if (property == null) { return new ParametersAction(); } List<ParameterValue> parameters = new ArrayList<ParameterValue>(); for (ParameterDefinition pd : property.getParameterDefinitions()) { ParameterValue param = pd.getDefaultParameterValue(); if (param != null) { parameters.add(param); } } return new ParametersAction(parameters); } }
@Override public Action getAction(AbstractBuild<?,?> build, TaskListener listener) throws IOException { ParametersAction action = build.getAction(ParametersAction.class); if (action == null) { listener.getLogger().println("[parameterized-trigger] Current build has no parameters."); return null; } else { List<ParameterValue> values = new ArrayList<ParameterValue>(action.getParameters().size()); for (ParameterValue value : action.getParameters()) // FileParameterValue is currently not reusable, so omit these: if (!(value instanceof FileParameterValue)) values.add(value); return new ParametersAction(values); } }
private static ParametersAction mergeParameters(ParametersAction base, ParametersAction overlay) { LinkedHashMap<String,ParameterValue> params = new LinkedHashMap<String,ParameterValue>(); for (ParameterValue param : base.getParameters()) params.put(param.getName(), param); for (ParameterValue param : overlay.getParameters()) params.put(param.getName(), param); return new ParametersAction(params.values().toArray(new ParameterValue[params.size()])); }
private void addBuildParameter(AbstractBuild<?, ?> build) { if (!CollectionUtils.isEmpty(this.latestBaselines)) { ArrayList<ParameterValue> parameters = new ArrayList<ParameterValue>(); String baselineName = latestBaselines.get(0); parameters.add(new StringParameterValue(ENV_CC_BASELINE_NAME, baselineName)); build.addAction(new ParametersAction(parameters)); } }
@Issue("JENKINS-45455") @Test public void parametersAndRestart() throws Exception { // Initial build passes - we mainly just want it to add the parameters. WorkflowRun original = expect("restart", "parametersAndRestart").go(); WorkflowJob p = original.getParent(); WorkflowRun failing = p.scheduleBuild2(0, new ParametersAction(new BooleanParameterValue("flag", false), new StringParameterValue("someParam", "changed"))).waitForStart(); j.assertBuildStatus(Result.FAILURE, j.waitForCompletion(failing)); HtmlPage redirect = restartFromStageInUI(failing, "restart"); assertNotNull(redirect); assertEquals(p.getAbsoluteUrl(), redirect.getUrl().toString()); j.waitUntilNoActivity(); WorkflowRun b3 = p.getBuildByNumber(3); assertNotNull(b3); j.assertBuildStatusSuccess(b3); j.assertLogContains("Odd numbered build, success", b3); j.assertLogContains("Stage \"pre-restart\" skipped due to this build restarting at stage \"restart\"", b3); j.assertLogContains("Flag is false", b3); j.assertLogContains("someParam is changed", b3); j.assertLogContains("otherParam is should not change", b3); j.assertLogNotContains("hello on non-restart", b3); }
@Override public ConsoleAnnotator annotate(Object context, MarkupText text, int charPos) { if (context instanceof AbstractBuild) { AbstractBuild<?,?> b = (AbstractBuild) context; ParametersAction pa = b.getAction(ParametersAction.class); if (pa!=null) { PatchParameterValue p = (PatchParameterValue) pa.getParameter("patch.diff"); if (p!=null) { text.addHyperlink(charPos,charPos+length,"parameters/parameter/patch.diff/"+p.getOriginalFileName()); } } } return null; }