java - 如何在管道兼容的詹金斯 SimpleBuildStep 插件中获取环境参数?
问题描述
我刚刚添加了管道兼容性,但我无法获得任何 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
方法?
解决方案
它是通过 Step 扩展完成的:
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;
}
}
然后您将能够通过您的 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";
}
}
推荐阅读
- javascript - Webpack 无法解析 React 组件
- git - Git 代码编辑器提交错误
- ios - ObjectMapper array error
- python - Loop through a python list and get a 1 or 0 for a match result
- javascript - 使用 onclick AJAX 调用使用 bootstrap 4 创建动态生成的手风琴
- php - PHP get multilanguage data from database with instant variables
- matlab - 特征聚类
- sql-server - Extract & transform data from Sql Server to MongoDB periodically
- html - Bootstrap 4 - 导航栏切换在 safari 上不起作用
- r - collapse strings in a vector three times for an or statement in r