Skip to content

Commit

Permalink
error handling improvements if no wars found
Browse files Browse the repository at this point in the history
  • Loading branch information
Ivan Stefko committed Feb 20, 2018
1 parent 6dd797a commit 3f630c3
Showing 1 changed file with 45 additions and 63 deletions.
108 changes: 45 additions & 63 deletions src/main/java/hudson/plugins/deploy/DeployPublisher.java
Original file line number Diff line number Diff line change
@@ -1,44 +1,40 @@
package hudson.plugins.deploy;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.annotation.Nonnull;

import org.jenkinsci.Symbol;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;

import com.cloudbees.plugins.credentials.common.StandardUsernamePasswordCredentials;

import hudson.AbortException;
import hudson.EnvVars;
import hudson.Extension;
import hudson.FilePath;
import hudson.Launcher;
import hudson.Util;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.Result;
import hudson.model.AbstractProject;
import hudson.model.listeners.ItemListener;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.model.listeners.ItemListener;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Notifier;
import hudson.tasks.Publisher;
import hudson.util.VariableResolver;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import jenkins.model.Jenkins;
import jenkins.tasks.SimpleBuildStep;
import jenkins.util.io.FileBoolean;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
import jenkins.tasks.SimpleBuildStep;
import org.jenkinsci.Symbol;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;

import javax.annotation.Nonnull;

/**
* Deploys WAR to a container.
Expand All @@ -50,24 +46,23 @@ public class DeployPublisher extends Notifier implements SimpleBuildStep, Serial
private List<ContainerAdapter> adapters;
private String contextPath = "";

private final String war;
private String war;
private boolean onFailure = true;

/**
* @deprecated
* Use {@link #getAdapters()}
*/
@Deprecated
public final ContainerAdapter adapter = null;
public final ContainerAdapter adapter = null;

@DataBoundConstructor
public DeployPublisher(final List<ContainerAdapter> adapters, final String war) {
public DeployPublisher(List<ContainerAdapter> adapters, String war) {
this.adapters = adapters;
this.war = war;
}

@Deprecated
public DeployPublisher(final List<ContainerAdapter> adapters, final String war, final String contextPath, final boolean onFailure) {
public DeployPublisher(List<ContainerAdapter> adapters, String war, String contextPath, boolean onFailure) {
this.adapters = adapters;
this.war = war;
}
Expand All @@ -81,7 +76,7 @@ public boolean isOnFailure () {
}

@DataBoundSetter
public void setOnFailure (final boolean onFailure) {
public void setOnFailure (boolean onFailure) {
this.onFailure = onFailure;
}

Expand All @@ -90,37 +85,27 @@ public String getContextPath () {
}

@DataBoundSetter
public void setContextPath (final String contextPath) {
public void setContextPath (String contextPath) {
this.contextPath = Util.fixEmpty(contextPath);
}

@Override
public void perform(@Nonnull final Run<?, ?> run, @Nonnull final FilePath workspace, @Nonnull final Launcher launcher, @Nonnull final TaskListener listener) throws InterruptedException, IOException {
final Result result = run.getResult();
public void perform(@Nonnull Run<?, ?> run, @Nonnull FilePath workspace, @Nonnull Launcher launcher, @Nonnull TaskListener listener) throws InterruptedException, IOException {
Result result = run.getResult();
if (onFailure || result == null || Result.SUCCESS.equals(result)) {
if (!workspace.exists()) {
listener.getLogger().println("[DeployPublisher][ERROR] Workspace not found");
throw new AbortException("Workspace not found");
}

EnvVars envVars = new EnvVars();
if (run instanceof AbstractBuild) {
final AbstractBuild build = (AbstractBuild) run;
envVars = build.getEnvironment(listener);
}

final VariableResolver<String> resolver = new VariableResolver.ByMap<String>(envVars);
final String warFiles = Util.replaceMacro(envVars.expand(this.war), resolver);

final FilePath[] wars = workspace.list(warFiles);
FilePath[] wars = workspace.list(this.war);
if (wars == null || wars.length == 0) {
listener.getLogger().printf("[DeployPublisher][WARN] No wars found. Deploy aborted. %n");
return;
throw new InterruptedException("[DeployPublisher][WARN] No wars found. Deploy aborted. %n");
}
listener.getLogger().printf("[DeployPublisher][INFO] Attempting to deploy %d war file(s)%n", wars.length);

for (final FilePath warFile : wars) {
for (final ContainerAdapter adapter : adapters) {
for (FilePath warFile : wars) {
for (ContainerAdapter adapter : adapters) {
adapter.redeployFile(warFile, contextPath, run, launcher, listener);
}
}
Expand All @@ -129,8 +114,7 @@ public void perform(@Nonnull final Run<?, ?> run, @Nonnull final FilePath worksp
}
}

@Override
public BuildStepMonitor getRequiredMonitorService() {
public BuildStepMonitor getRequiredMonitorService() {
return BuildStepMonitor.BUILD;
}

Expand All @@ -157,16 +141,15 @@ public List<ContainerAdapter> getAdapters() {
@Extension
public static final class DescriptorImpl extends BuildStepDescriptor<Publisher> {
@Override
public boolean isApplicable(final Class<? extends AbstractProject> jobType) {
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return true;
}

public boolean defaultOnFailure (final Object job) {
public boolean defaultOnFailure (Object job) {
return !(job instanceof AbstractProject);
}

@Override
public String getDisplayName() {
public String getDisplayName() {
return Messages.DeployPublisher_DisplayName();
}

Expand All @@ -176,10 +159,9 @@ public String getDisplayName() {
* @return a alphabetically sorted list of AdapterDescriptors
*/
public List<ContainerAdapterDescriptor> getAdaptersDescriptors() {
final List<ContainerAdapterDescriptor> r = new ArrayList<ContainerAdapterDescriptor>(ContainerAdapter.all());
List<ContainerAdapterDescriptor> r = new ArrayList<ContainerAdapterDescriptor>(ContainerAdapter.all());
Collections.sort(r,new Comparator<ContainerAdapterDescriptor>() {
@Override
public int compare(final ContainerAdapterDescriptor o1, final ContainerAdapterDescriptor o2) {
public int compare(ContainerAdapterDescriptor o1, ContainerAdapterDescriptor o2) {
return o1.getDisplayName().compareTo(o2.getDisplayName());
}
});
Expand All @@ -196,22 +178,22 @@ public static final class Migrator extends ItemListener {
@SuppressWarnings("deprecation")
@Override
public void onLoaded() {
final FileBoolean migrated = new FileBoolean(getClass(), "migratedCredentials");
FileBoolean migrated = new FileBoolean(getClass(), "migratedCredentials");
if (migrated.isOn()) {
return;
}
final List<StandardUsernamePasswordCredentials> generatedCredentials = new ArrayList<StandardUsernamePasswordCredentials>();
for (final AbstractProject<?,?> project : Jenkins.getActiveInstance().getAllItems(AbstractProject.class)) {
List<StandardUsernamePasswordCredentials> generatedCredentials = new ArrayList<StandardUsernamePasswordCredentials>();
for (AbstractProject<?,?> project : Jenkins.getActiveInstance().getAllItems(AbstractProject.class)) {
try {
final DeployPublisher d = project.getPublishersList().get(DeployPublisher.class);
DeployPublisher d = project.getPublishersList().get(DeployPublisher.class);
if (d == null) {
continue;
}
boolean modified = false;
boolean successful = true;
for (final ContainerAdapter a : d.getAdapters()) {
for (ContainerAdapter a : d.getAdapters()) {
if (a instanceof PasswordProtectedAdapterCargo) {
final PasswordProtectedAdapterCargo ppac = (PasswordProtectedAdapterCargo) a;
PasswordProtectedAdapterCargo ppac = (PasswordProtectedAdapterCargo) a;
if (ppac.getCredentialsId() == null) {
successful &= ppac.migrateCredentials(generatedCredentials);
modified = true;
Expand All @@ -227,7 +209,7 @@ public void onLoaded() {
Logger.getLogger(DeployPublisher.class.getName()).log(Level.SEVERE, "Failed to create credentials and migrate DeployPublisher in project: {0}, please manually add credentials.", project.getName());
}
}
} catch (final IOException e) {
} catch (IOException e) {
Logger.getLogger(DeployPublisher.class.getName()).log(Level.WARNING, "Migration unsuccessful", e);
}
}
Expand Down

0 comments on commit 3f630c3

Please sign in to comment.