package com.nirima.jenkins.plugins.docker.builder; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.exception.DockerException; import com.nirima.jenkins.plugins.docker.DockerCloud; import com.nirima.jenkins.plugins.docker.DockerTemplate; 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.IOException; import java.io.PrintStream; /** * Build step that provision? container in Docker Cloud * * @author magnayn */ public class DockerBuilderControlOptionProvisionAndStart extends DockerBuilderControlCloudOption { private static final Logger LOG = LoggerFactory.getLogger(DockerBuilderControlOptionProvisionAndStart.class); private final String templateId; @DataBoundConstructor public DockerBuilderControlOptionProvisionAndStart(String cloudName, String templateId) { super(cloudName); this.templateId = templateId; } public String getTemplateId() { return templateId; } @Override public void execute(Run<?, ?> build, Launcher launcher, TaskListener listener) throws DockerException { final PrintStream llog = listener.getLogger(); final DockerCloud cloud = getCloud(build, launcher); DockerTemplate template = cloud.getTemplate(templateId); DockerClient client = cloud.getClient(); String containerId = DockerCloud.runContainer(template.getDockerTemplateBase(), client, null); LOG.info("Starting container {}, cloud {}", containerId, cloud.getDisplayName()); llog.println("Starting container " + containerId + ", cloud " + cloud.getDisplayName()); getLaunchAction(build).started(client, containerId); } @Extension public static final class DescriptorImpl extends DockerBuilderControlOptionDescriptor { @Override public String getDisplayName() { return "Provision & Start Container"; } } }