package com.nirima.jenkins.plugins.docker.builder;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.exception.DockerException;
import com.github.dockerjava.api.exception.NotModifiedException;
import hudson.Extension;
import hudson.Launcher;
import hudson.model.Run;
import hudson.model.TaskListener;
import org.kohsuke.stapler.DataBoundConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.PrintStream;
/**
* Build step that stops container in DockerCloud
*
* @author magnayn
*/
public class DockerBuilderControlOptionStop extends DockerBuilderControlOptionStopStart {
private static final Logger LOG = LoggerFactory.getLogger(DockerBuilderControlOptionStop.class);
public final boolean remove;
@DataBoundConstructor
public DockerBuilderControlOptionStop(String cloudName, String containerId, boolean remove) {
super(cloudName, containerId);
this.remove = remove;
}
@Override
public void execute(Run<?, ?> build, Launcher launcher, TaskListener listener)
throws DockerException {
final PrintStream llog = listener.getLogger();
LOG.info("Stopping container " + containerId);
llog.println("Stopping container " + containerId);
DockerClient client = getCloud(build, launcher).getClient();
try {
client.stopContainerCmd(containerId).exec();
} catch (NotModifiedException ex) {
LOG.info("Already stopped.");
llog.println("Already stopped.");
}
getLaunchAction(build).stopped(client, containerId);
if (remove) {
LOG.info("Removing container {}...", containerId);
llog.println("Removing container " + containerId + "...");
client.removeContainerCmd(containerId);
}
}
@Extension
public static final class DescriptorImpl extends DockerBuilderControlOptionDescriptor {
@Override
public String getDisplayName() {
return "Stop Container";
}
}
}