Java 如何在pipeline compitable jenkins SimpleBuildStep插件中获取环境参数?

Java 如何在pipeline compitable jenkins SimpleBuildStep插件中获取环境参数?,java,jenkins,jenkins-pipeline,Java,Jenkins,Jenkins Pipeline,我刚刚添加了管道兼容性,但无法获取任何环境参数。 我的班级定义如下: 公共类JobBuildStep扩展生成器实现SimpleBuildStep 并执行方法: public void perform(@Nonnull Run Run、@Nonnull FilePath workspace、@Nonnull Launcher Launcher、@Nonnull tasklister listener)抛出异常异常异常 谁能告诉我有什么办法可以解决这个问题? 我还发现了一个问题- 最后一条评论说我应

我刚刚添加了管道兼容性,但无法获取任何环境参数。 我的班级定义如下:

公共类JobBuildStep扩展生成器实现SimpleBuildStep

并执行方法:

public void perform(@Nonnull Run Run、@Nonnull FilePath workspace、@Nonnull Launcher Launcher、@Nonnull tasklister listener)抛出异常异常异常

谁能告诉我有什么办法可以解决这个问题? 我还发现了一个问题- 最后一条评论说我应该实现
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>

org.jenkins-ci.plugins.workflow
工作流基本步骤
2.7
包裹?如果是,我如何使用
@Override public StepExecution start(StepContext StepContext)引发异常

方法?

通过步骤扩展完成:

公共类示例BuildStep扩展了步骤

以及使用EnvVars作为输入创建perform方法:

public void perform(@Nonnull Run Run、@Nonnull FilePath workspace、@Nonnull Launcher Launcher、@Nonnull tasklister listener、@Nonnull EnvVars environment)抛出异常异常

下面是按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;
  }
}
@覆盖
公共StepExecution开始(StepContext StepContext){
返回新的执行(stepContext,this);
}
私有最终静态类执行扩展了SynchronousNonBlockingStepExecution{
私有瞬态最终示例构建步骤;
保护执行(
@非空StepContext上下文,
示例构建步骤(步骤){
超级(上下文);
这个步骤=步骤;
}
@凌驾
受保护的Void run()引发异常{
FilePath workspace=getContext().get(FilePath.class);
workspace.mkdirs();
执行(
getContext().get(Run.class),
工作空间,
getContext().get(Launcher.class),
getContext().get(TaskListener.class),
getContext().get(EnvVars.class));
返回null;
}
}
然后,您将能够通过在StepDescriptor中通过getFunctionName()返回的名称来使用它:

@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";
  }
}
@扩展名
公共静态类描述符RIMPL扩展了StepDescriptor{
@凌驾
公共集>getRequiredContext(){
返回ImmutableSet.of(FilePath.class、Run.class、Launcher.class、TaskListener.class、EnvVars.class);
}
@凌驾
公共字符串getFunctionName(){
返回“运行您的步骤”;
}

公共布尔值不适用(ClassDo
Step
也可以作为管道作业和自由式作业的构建步骤,类似于
SimpleBuildStep
?@MatthiasSommer,很抱歉回复时间太长,我有点放弃了开发这些东西,但据我所知,它也应该适用于自由式作业。如果我错了,请纠正我。请参阅isApplicable函数。)我猜。我以前使用了
extends Builder为自由式作业和管道实现SimpleBuildStep
。我将实现更改为您的示例,但该插件不再作为自由式构建步骤找到。