如何更改Jenkin的Property / ParameterDefinition对象的值

时间:2019-08-22 12:44:56

标签: java jenkins-plugins

当前,我的设置包含2个项目/职位,我们将其称为job1和job2。我的插件将在job1中运行东西,然后使用一些参数在job2中安排新的构建。我正在使用parameterized-trigger插件,以将参数传递给新版本。当前,我可以获取job2,并且可以找到包含job2所需的默认参数设置的属性。但是我无法弄清楚如何从job1修改设置值。事实是,job2中的每个构建都需要有自己的参数值,因此无法对其进行硬编码,job1会生成这些值。

void perform(Run<?, ?> run, FilePath workspace, TaskListener listener) throws AbortException {
  // do stuff.

  Job job = getJobWithName("job2");

  if (job != null) {
    ParameterDefinition property = getProperty(job);

    if (property != null) {
      // TODO: how to modify the property?
    } else {
      // throw error 
    }
  }

  // starting a new build in a job2.
  if (job instanceof AbstractProject) {
    // TODO: change the Cause at some point
    ((AbstractProject) job).scheduleBuild(0, new Cause.UserIdCause());
  } else if (job instanceof WorkflowJob) {
    ((WorkflowJob) job).scheduleBuild(0, new Cause.UserIdCause());
  }
}


// fetches the correct job, in this case job2
private Job getJobWithName(String jobName) {
  Jenkins jenkinsInstance = Jenkins.getInstanceOrNull();

  if (jenkinsInstance != null) {
    List<Job> jobs = jenkinsInstance.getAllItems(Job.class);

    for (Job job : jobs) {
      if (job.getDisplayName().equals(jobName)) {
        return job;
      }
    }
  }

  return null;
}

// fetches the correct property
private ParameterDefinition getProperty(Job job) {
  ParametersDefinitionProperty property = (ParametersDefinitionProperty) job.getProperty(ParametersDefinitionProperty.class);

  for (ParameterDefinition pd : property.getParameterDefinitions()) {
    ParameterValue param = pd.getDefaultParameterValue();
    if (param != null) {
      if (name.equals("my_parameter_name") && pd.getType().equals("StringParameterDefinition")) {
        return pd;
      }
    }
  }
  return null;
}

1 个答案:

答案 0 :(得分:0)

job.addProperty(new ParametersDefinitionProperty(
new StringParameterDefinition("StringProp", "DefaultValue1"), 
new BooleanParameterDefinition("BoolProp", false, "Desc")));