Как получить параметры среды в конвейере, совместимом с плагином jenkins SimpleBuildStep? - PullRequest
0 голосов
/ 21 мая 2018

Я только что добавил конвейерную совместимость, но не могу получить ни один из параметров env.У моего класса есть следующее определение:

public class JobBuildStep extends Builder implements SimpleBuildStep

и метод выполнения:

public void perform(@Nonnull Run<?, ?> run, @Nonnull FilePath workspace, @Nonnull Launcher launcher, @Nonnull TaskListener listener) throws AbortException

Может кто-нибудь сказать, что этоварианты это исправить?Я также нашел проблему с ним - https://issues.jenkins -ci.org / browse / JENKINS-29144 В последнем комментарии сказано, что я должен вместо этого реализовать Step, это org.jenkinsci.plugins.workflow.steps.Step из

<dependency>
  <groupId>org.jenkins-ci.plugins.workflow</groupId>
  <artifactId>workflow-basic-steps</artifactId>
  <version>2.7</version>
</dependency>

пакет?Если да, то как я могу использовать метод @Override public StepExecution start(StepContext stepContext) throws Exception?

1 Ответ

0 голосов
/ 23 мая 2018

Это было сделано путем расширения шага:

public class ExampleBuildStep extends Step

и создания метода перформанса с EnvVars в качестве ввода:

public void perform(@Nonnull Run<?, ?> run, @Nonnull FilePath workspace, @Nonnull Launcher launcher, @Nonnull TaskListener listener, @Nonnull EnvVars environment) throws AbortException

иВот реализованные методы класса Step:

@Override
public StepExecution start(StepContext stepContext) {

  return new Execution(stepContext, this);
}

private final static class Execution extends SynchronousNonBlockingStepExecution<Void> {

  private transient final ExampleBuildStep step;

  protected Execution(
    @Nonnull StepContext context,
    ExampleBuildStep step) {
    super(context);
    this.step = step;
  }

  @Override
  protected Void run() throws Exception {

    FilePath workspace = getContext().get(FilePath.class);
    workspace.mkdirs();
    step.perform(
      getContext().get(Run.class),
      workspace,
      getContext().get(Launcher.class),
      getContext().get(TaskListener.class),
      getContext().get(EnvVars.class));
    return null;
  }
}

И тогда вы сможете использовать его по имени, которое возвращается getFunctionName () в вашем StepDescriptor:

@Extension
public static class DescriptorImpl extends StepDescriptor {

  @Override
  public Set<? extends Class<?>> getRequiredContext() {
    return ImmutableSet.of(FilePath.class, Run.class, Launcher.class, TaskListener.class, EnvVars.class);
  }

  @Override
  public String getFunctionName() {
    return "run_your_step";
  }

  public boolean isApplicable(Class<? extends AbstractProject> aClass) {
    // Indicates that this builder can be used with all kinds of project types
    return true;
  }

  public String getDisplayName() {
    return "Example of step plugin";
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...