package org.jenkinsci.plugins.dockerbuildstep.cmd;
import hudson.Extension;
import hudson.model.AbstractBuild;
import java.util.List;
import org.jenkinsci.plugins.dockerbuildstep.log.ConsoleLogger;
import org.kohsuke.stapler.DataBoundConstructor;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.exception.DockerException;
import com.github.dockerjava.api.model.Container;
/**
* This command removes all Docker containers. Before removing them, it kills all them in case some of them are running.
*
* @author vjuranek
*
*/
public class RemoveAllCommand extends DockerCommand {
private final boolean removeVolumes;
private final boolean force;
@DataBoundConstructor
public RemoveAllCommand(boolean removeVolumes, boolean force) {
this.removeVolumes = removeVolumes;
this.force = force;
}
public boolean isRemoveVolumes() {
return removeVolumes;
}
public boolean isForce() {
return force;
}
@Override
public void execute(@SuppressWarnings("rawtypes") AbstractBuild build, ConsoleLogger console)
throws DockerException {
DockerClient client = getClient(build, null);
List<Container> containers = client.listContainersCmd().withShowAll(true).exec();
for (Container container : containers) {
client.removeContainerCmd((container.getId())).withForce(force).withRemoveVolumes(removeVolumes).exec();
console.logInfo("removed container id " + container.getId());
}
}
@Extension
public static class RemoveAllCommandDescriptor extends DockerCommandDescriptor {
@Override
public String getDisplayName() {
return "Remove all containers";
}
}
}