package org.jenkinsci.plugins.dockerbuildstep.cmd; import hudson.Extension; import hudson.model.AbstractBuild; import java.util.List; import org.jenkinsci.plugins.dockerbuildstep.action.EnvInvisibleAction; import org.jenkinsci.plugins.dockerbuildstep.log.ConsoleLogger; import org.jenkinsci.plugins.dockerbuildstep.util.Resolver; 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; import com.github.dockerjava.api.command.InspectContainerResponse; /** * This command starts all containers create from specified image ID. It also exports some build environment variable * like IP or started containers. * * @author vjuranek * */ public class StartByImageIdCommand extends DockerCommand { private final String imageId; @DataBoundConstructor public StartByImageIdCommand(String imageId) { this.imageId = imageId; } public String getImageId() { return imageId; } @Override public void execute(@SuppressWarnings("rawtypes") AbstractBuild build, ConsoleLogger console) throws DockerException { if (imageId == null || imageId.isEmpty()) { throw new IllegalArgumentException("At least one parameter is required"); } String imageIdRes = Resolver.buildVar(build, imageId); DockerClient client = getClient(build, null); List<Container> containers = client.listContainersCmd().withShowAll(true).exec(); for (Container c : containers) { if (imageIdRes.equalsIgnoreCase(c.getImage())) { client.startContainerCmd(c.getId()); console.logInfo("started container id " + c.getId()); InspectContainerResponse inspectResp = client.inspectContainerCmd(c.getId()).exec(); EnvInvisibleAction envAction = new EnvInvisibleAction(inspectResp); build.addAction(envAction); } } } @Extension public static class StartByImageCommandDescriptor extends DockerCommandDescriptor { @Override public String getDisplayName() { return "Start container(s) by image ID"; } } }