package org.jfrog.hudson.pipeline.steps; import com.google.inject.Inject; import hudson.EnvVars; import hudson.Extension; import hudson.FilePath; import hudson.Util; import hudson.model.Run; import hudson.model.TaskListener; import org.jenkinsci.plugins.workflow.steps.AbstractStepDescriptorImpl; import org.jenkinsci.plugins.workflow.steps.AbstractStepImpl; import org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution; import org.jenkinsci.plugins.workflow.steps.StepContextParameter; import org.jfrog.hudson.pipeline.Utils; import org.jfrog.hudson.pipeline.executors.GenericUploadExecutor; import org.jfrog.hudson.pipeline.types.ArtifactoryServer; import org.jfrog.hudson.pipeline.types.buildInfo.BuildInfo; import org.jfrog.hudson.pipeline.types.buildInfo.BuildInfoAccessor; import org.kohsuke.stapler.DataBoundConstructor; public class UploadStep extends AbstractStepImpl { private BuildInfo buildInfo; private String spec; private ArtifactoryServer server; @DataBoundConstructor public UploadStep(String spec, BuildInfo buildInfo, ArtifactoryServer server) { this.spec = spec; this.buildInfo = buildInfo; this.server = server; } public BuildInfo getBuildInfo() { return buildInfo; } public String getSpec() { return spec; } public ArtifactoryServer getServer() { return server; } public static class Execution extends AbstractSynchronousNonBlockingStepExecution<BuildInfo> { private static final long serialVersionUID = 1L; @StepContextParameter private transient FilePath ws; @StepContextParameter private transient Run build; @StepContextParameter private transient TaskListener listener; @StepContextParameter private transient EnvVars env; @Inject(optional = true) private transient UploadStep step; @Override protected BuildInfo run() throws Exception { BuildInfo buildInfo = new GenericUploadExecutor(Utils.prepareArtifactoryServer(null, step.getServer()), listener, build, ws, step.getBuildInfo(), getContext()).execution(Util.replaceMacro(step.getSpec(), env)); new BuildInfoAccessor(buildInfo).captureVariables(env, build, listener); return buildInfo; } } @Extension public static final class DescriptorImpl extends AbstractStepDescriptorImpl { public DescriptorImpl() { super(UploadStep.Execution.class); } @Override // The step is invoked by ArtifactoryServer by the step name public String getFunctionName() { return "artifactoryUpload"; } @Override public String getDisplayName() { return "Upload artifacts"; } @Override public boolean isAdvanced() { return true; } } }