package com.nirima.jenkins.plugins.docker; import hudson.Extension; import hudson.model.AbstractBuild; import hudson.model.BuildVariableContributor; import hudson.model.Executor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import shaded.org.apache.http.client.utils.URIBuilder; import java.net.URISyntaxException; import java.util.Map; /** * Contribute docker related vars in build. * TODO seems this will never satisfy all use cases and dumping inspect json into WS * will be more generic solution * * @author Kanstantsin Shautsou */ @Extension public class DockerBuildVariableContributor extends BuildVariableContributor { private static final Logger LOG = LoggerFactory.getLogger(DockerBuildVariableContributor.class); @Override public void buildVariablesFor(AbstractBuild build, Map<String, String> variables) { final Executor executor = build.getExecutor(); if (executor != null && executor.getOwner() instanceof DockerComputer) { final DockerComputer dockerComputer = (DockerComputer) executor.getOwner(); variables.put("DOCKER_CONTAINER_ID", dockerComputer.getContainerId()); variables.put("JENKINS_CLOUD_ID", dockerComputer.getCloudId()); final DockerCloud cloud = dockerComputer.getCloud(); if (cloud.isExposeDockerHost()) { try { //replace http:// and https:// from docker-java to tcp:// final URIBuilder uriBuilder = new URIBuilder(cloud.getServerUrl()); if (!uriBuilder.getScheme().equals("unix")) { uriBuilder.setScheme("tcp"); } final String dockerHost = uriBuilder.toString(); variables.put("DOCKER_HOST", dockerHost); } catch (URISyntaxException e) { LOG.error("Can't build 'DOCKER_HOST' var: {}", e.getMessage()); } } } } }