From 95caffad742b61470b4a4ce98286b6b2fa5a07fc Mon Sep 17 00:00:00 2001 From: alenkacz Date: Sat, 19 Dec 2015 15:58:36 +0100 Subject: [PATCH 1/3] Support for build-args of docker build In 1.9 there is new property - build-args that can be specified for docker build command --- .../dockerjava/api/command/BuildImageCmd.java | 6 ++++++ .../core/command/BuildImageCmdImpl.java | 15 +++++++++++++++ .../dockerjava/jaxrs/BuildImageCmdExec.java | 16 ++++++++++++++++ .../core/command/BuildImageCmdImplTest.java | 14 ++++++++++++++ src/test/resources/testBuildArgs/Dockerfile | 5 +++++ 5 files changed, 56 insertions(+) create mode 100644 src/test/resources/testBuildArgs/Dockerfile diff --git a/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java b/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java index 96d94fd06..07d29fb54 100644 --- a/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java @@ -3,6 +3,7 @@ import java.io.File; import java.io.InputStream; import java.net.URI; +import java.util.Map; import javax.annotation.CheckForNull; import javax.annotation.Nonnull; @@ -87,6 +88,9 @@ public interface BuildImageCmd extends AsyncDockerCmd getBuildArgs(); + // setters public BuildImageCmd withTag(String tag); @@ -115,6 +119,8 @@ public interface BuildImageCmd extends AsyncDockerCmd buildArgs = new HashMap(); + public BuildImageCmdImpl(BuildImageCmd.Exec exec) { super(exec); } @@ -138,6 +142,11 @@ public String getCpusetcpus() { return cpusetcpus; } + @Override + public Map getBuildArgs() { + return buildArgs; + } + // getter lib specific @Override @@ -219,6 +228,12 @@ public BuildImageCmd withCpusetcpus(String cpusetcpus) { return this; } + @Override + public BuildImageCmd withBuildArg(String key, String value) { + this.buildArgs.put(key, value); + return this; + } + // lib specific @Override diff --git a/src/main/java/com/github/dockerjava/jaxrs/BuildImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/BuildImageCmdExec.java index fd868a7b3..68e56bbec 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/BuildImageCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/BuildImageCmdExec.java @@ -6,6 +6,7 @@ import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; +import com.fasterxml.jackson.databind.ObjectMapper; import org.glassfish.jersey.client.ClientProperties; import org.glassfish.jersey.client.RequestEntityProcessing; import org.slf4j.Logger; @@ -20,9 +21,12 @@ import com.github.dockerjava.jaxrs.async.AbstractCallbackNotifier; import com.github.dockerjava.jaxrs.async.POSTCallbackNotifier; +import java.io.IOException; + public class BuildImageCmdExec extends AbstrAsyncDockerCmdExec implements BuildImageCmd.Exec { private static final Logger LOGGER = LoggerFactory.getLogger(BuildImageCmdExec.class); + private static final ObjectMapper MAPPER = new ObjectMapper(); public BuildImageCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { super(baseResource, dockerClientConfig); @@ -88,6 +92,18 @@ protected AbstractCallbackNotifier callbackNotifier(BuildImag webTarget = webTarget.queryParam("cpusetcpus", command.getCpusetcpus()); } + if (command.hasRemoveEnabled() == null || !command.hasRemoveEnabled()) { + webTarget = webTarget.queryParam("rm", "false"); + } + + if (command.getBuildArgs() != null) { + try { + webTarget = webTarget.queryParam("buildargs", MAPPER.writeValueAsString(command.getBuildArgs())); + } catch (IOException e) { + // pass + } + } + webTarget.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED); webTarget.property(ClientProperties.CHUNKED_ENCODING_SIZE, 1024 * 1024); diff --git a/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java index 9623e077f..9266c5ccd 100644 --- a/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java @@ -304,4 +304,18 @@ public void testBuildFromPrivateRegistry() throws Exception { LOG.info("Image Inspect: {}", inspectImageResponse.toString()); } + + @Test + public void testBuildArgs() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testBuildArgs").getFile()); + + String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).withBuildArg("testArg", "abc").exec(new BuildImageResultCallback()) + .awaitImageId(); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + assertThat(inspectImageResponse, not(nullValue())); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + assertThat(inspectImageResponse.getConfig().getLabels().get("test"), equalTo("abc")); + } } diff --git a/src/test/resources/testBuildArgs/Dockerfile b/src/test/resources/testBuildArgs/Dockerfile new file mode 100644 index 000000000..c8dd0ae36 --- /dev/null +++ b/src/test/resources/testBuildArgs/Dockerfile @@ -0,0 +1,5 @@ +FROM ubuntu:latest + +ARG testArg + +LABEL "test"=$testArg From a11811b8b6a725ba0f3349dd4e543f8ba80d0123 Mon Sep 17 00:00:00 2001 From: alenkacz Date: Sat, 9 Jan 2016 13:38:04 +0100 Subject: [PATCH 2/3] Add information about API version --- .../com/github/dockerjava/api/command/BuildImageCmd.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java b/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java index 07d29fb54..3f3ca5a5e 100644 --- a/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java @@ -10,6 +10,7 @@ import com.github.dockerjava.api.model.AuthConfigurations; import com.github.dockerjava.api.model.BuildResponseItem; +import com.github.dockerjava.core.RemoteApiVersion; /** * Build an image from Dockerfile. @@ -88,6 +89,9 @@ public interface BuildImageCmd extends AsyncDockerCmd getBuildArgs(); @@ -119,6 +123,9 @@ public interface BuildImageCmd extends AsyncDockerCmd Date: Sun, 10 Jan 2016 09:24:28 +0100 Subject: [PATCH 3/3] Add also netty based implementation --- .../dockerjava/netty/exec/BuildImageCmdExec.java | 12 ++++++++++++ .../netty/exec/BuildImageCmdExecTest.java | 14 ++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/main/java/com/github/dockerjava/netty/exec/BuildImageCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/BuildImageCmdExec.java index 9c0e6c09f..0d1573158 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/BuildImageCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/BuildImageCmdExec.java @@ -1,5 +1,6 @@ package com.github.dockerjava.netty.exec; +import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,9 +14,12 @@ import com.github.dockerjava.netty.MediaType; import com.github.dockerjava.netty.WebTarget; +import java.io.IOException; + public class BuildImageCmdExec extends AbstrAsyncDockerCmdExec implements BuildImageCmd.Exec { private static final Logger LOGGER = LoggerFactory.getLogger(BuildImageCmdExec.class); + private static final ObjectMapper MAPPER = new ObjectMapper(); public BuildImageCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { super(baseResource, dockerClientConfig); @@ -80,6 +84,14 @@ protected Void execute0(BuildImageCmd command, ResultCallback webTarget = webTarget.queryParam("cpusetcpus", command.getCpusetcpus()); } + if (command.getBuildArgs() != null) { + try { + webTarget = webTarget.queryParam("buildargs", MAPPER.writeValueAsString(command.getBuildArgs())); + } catch (IOException e) { + // pass + } + } + LOGGER.trace("POST: {}", webTarget); InvocationBuilder builder = resourceWithOptionalAuthConfig(command, webTarget.request()).accept( diff --git a/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java index 7fb94fcd4..e4aa05250 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java @@ -296,4 +296,18 @@ public void testBuildFromPrivateRegistry() throws Exception { LOG.info("Image Inspect: {}", inspectImageResponse.toString()); } + + @Test + public void testBuildArgs() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testBuildArgs").getFile()); + + String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).withBuildArg("testArg", "abc").exec(new BuildImageResultCallback()) + .awaitImageId(); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + assertThat(inspectImageResponse, not(nullValue())); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + assertThat(inspectImageResponse.getConfig().getLabels().get("test"), equalTo("abc")); + } }