package hudson.plugins.deploy; import hudson.FilePath; import hudson.Launcher; import hudson.Extension; import hudson.model.AbstractBuild; import hudson.model.AbstractProject; import hudson.model.BuildListener; import hudson.model.Result; import hudson.tasks.BuildStepDescriptor; import hudson.tasks.BuildStepMonitor; import hudson.tasks.Notifier; import hudson.tasks.Publisher; import java.io.IOException; import java.io.Serializable; import java.util.List; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import org.kohsuke.stapler.DataBoundConstructor; /** * Deploys WAR to a continer. * * @author Kohsuke Kawaguchi */ public class DeployPublisher extends Notifier implements Serializable { public final ContainerAdapter adapter; public final String war; public final boolean onFailure; @DataBoundConstructor public DeployPublisher(ContainerAdapter adapter, String war, boolean onFailure) { this.adapter = adapter; this.war = war; this.onFailure = onFailure; } public boolean perform(AbstractBuild<?,?> build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { if (build.getResult().equals(Result.SUCCESS) || onFailure) { for (FilePath warFile : build.getWorkspace().list(this.war)) { if(!adapter.redeploy(warFile,build,launcher,listener)) build.setResult(Result.FAILURE); } } return true; } public BuildStepMonitor getRequiredMonitorService() { return BuildStepMonitor.BUILD; } @Extension public static final class DescriptorImpl extends BuildStepDescriptor<Publisher> { public boolean isApplicable(Class<? extends AbstractProject> jobType) { return true; } public String getDisplayName() { return Messages.DeployPublisher_DisplayName(); } /** * Sort the descriptors so that the order they are displayed is more predictable */ public List<ContainerAdapterDescriptor> getContainerAdapters() { List<ContainerAdapterDescriptor> r = new ArrayList<ContainerAdapterDescriptor>(ContainerAdapter.all()); Collections.sort(r,new Comparator<ContainerAdapterDescriptor>() { public int compare(ContainerAdapterDescriptor o1, ContainerAdapterDescriptor o2) { return o1.getDisplayName().compareTo(o2.getDisplayName()); } }); return r; } } private static final long serialVersionUID = 1L; }