Skip to content

Commit 95caffa

Browse files
committed
Support for build-args of docker build
In 1.9 there is new property - build-args that can be specified for docker build command
1 parent ff8c01c commit 95caffa

File tree

5 files changed

+56
-0
lines changed

5 files changed

+56
-0
lines changed

src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.File;
44
import java.io.InputStream;
55
import java.net.URI;
6+
import java.util.Map;
67

78
import javax.annotation.CheckForNull;
89
import javax.annotation.Nonnull;
@@ -87,6 +88,9 @@ public interface BuildImageCmd extends AsyncDockerCmd<BuildImageCmd, BuildRespon
8788
@CheckForNull
8889
public String getCpusetcpus();
8990

91+
@CheckForNull
92+
public Map<String, String> getBuildArgs();
93+
9094
// setters
9195

9296
public BuildImageCmd withTag(String tag);
@@ -115,6 +119,8 @@ public interface BuildImageCmd extends AsyncDockerCmd<BuildImageCmd, BuildRespon
115119

116120
public BuildImageCmd withCpusetcpus(String cpusetcpus);
117121

122+
public BuildImageCmd withBuildArg(String key, String value);
123+
118124
// setters lib specific
119125

120126
public BuildImageCmd withBuildAuthConfigs(AuthConfigurations authConfig);

src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import java.io.IOException;
77
import java.io.InputStream;
88
import java.net.URI;
9+
import java.util.HashMap;
10+
import java.util.Map;
911

1012
import com.github.dockerjava.api.command.BuildImageCmd;
1113
import com.github.dockerjava.api.model.AuthConfigurations;
@@ -50,6 +52,8 @@ public class BuildImageCmdImpl extends AbstrAsyncDockerCmd<BuildImageCmd, BuildR
5052

5153
private URI remote;
5254

55+
private Map<String, String> buildArgs = new HashMap<String, String>();
56+
5357
public BuildImageCmdImpl(BuildImageCmd.Exec exec) {
5458
super(exec);
5559
}
@@ -138,6 +142,11 @@ public String getCpusetcpus() {
138142
return cpusetcpus;
139143
}
140144

145+
@Override
146+
public Map<String, String> getBuildArgs() {
147+
return buildArgs;
148+
}
149+
141150
// getter lib specific
142151

143152
@Override
@@ -219,6 +228,12 @@ public BuildImageCmd withCpusetcpus(String cpusetcpus) {
219228
return this;
220229
}
221230

231+
@Override
232+
public BuildImageCmd withBuildArg(String key, String value) {
233+
this.buildArgs.put(key, value);
234+
return this;
235+
}
236+
222237
// lib specific
223238

224239
@Override

src/main/java/com/github/dockerjava/jaxrs/BuildImageCmdExec.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import javax.ws.rs.client.WebTarget;
77
import javax.ws.rs.core.MediaType;
88

9+
import com.fasterxml.jackson.databind.ObjectMapper;
910
import org.glassfish.jersey.client.ClientProperties;
1011
import org.glassfish.jersey.client.RequestEntityProcessing;
1112
import org.slf4j.Logger;
@@ -20,9 +21,12 @@
2021
import com.github.dockerjava.jaxrs.async.AbstractCallbackNotifier;
2122
import com.github.dockerjava.jaxrs.async.POSTCallbackNotifier;
2223

24+
import java.io.IOException;
25+
2326
public class BuildImageCmdExec extends AbstrAsyncDockerCmdExec<BuildImageCmd, BuildResponseItem> implements
2427
BuildImageCmd.Exec {
2528
private static final Logger LOGGER = LoggerFactory.getLogger(BuildImageCmdExec.class);
29+
private static final ObjectMapper MAPPER = new ObjectMapper();
2630

2731
public BuildImageCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) {
2832
super(baseResource, dockerClientConfig);
@@ -88,6 +92,18 @@ protected AbstractCallbackNotifier<BuildResponseItem> callbackNotifier(BuildImag
8892
webTarget = webTarget.queryParam("cpusetcpus", command.getCpusetcpus());
8993
}
9094

95+
if (command.hasRemoveEnabled() == null || !command.hasRemoveEnabled()) {
96+
webTarget = webTarget.queryParam("rm", "false");
97+
}
98+
99+
if (command.getBuildArgs() != null) {
100+
try {
101+
webTarget = webTarget.queryParam("buildargs", MAPPER.writeValueAsString(command.getBuildArgs()));
102+
} catch (IOException e) {
103+
// pass
104+
}
105+
}
106+
91107
webTarget.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED);
92108
webTarget.property(ClientProperties.CHUNKED_ENCODING_SIZE, 1024 * 1024);
93109

src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,4 +304,18 @@ public void testBuildFromPrivateRegistry() throws Exception {
304304
LOG.info("Image Inspect: {}", inspectImageResponse.toString());
305305

306306
}
307+
308+
@Test
309+
public void testBuildArgs() throws Exception {
310+
File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testBuildArgs").getFile());
311+
312+
String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).withBuildArg("testArg", "abc").exec(new BuildImageResultCallback())
313+
.awaitImageId();
314+
315+
InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec();
316+
assertThat(inspectImageResponse, not(nullValue()));
317+
LOG.info("Image Inspect: {}", inspectImageResponse.toString());
318+
319+
assertThat(inspectImageResponse.getConfig().getLabels().get("test"), equalTo("abc"));
320+
}
307321
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
FROM ubuntu:latest
2+
3+
ARG testArg
4+
5+
LABEL "test"=$testArg

0 commit comments

Comments
 (0)