diff --git a/src/main/java/com/cloudbees/jenkins/plugins/docker_build_env/Docker.java b/src/main/java/com/cloudbees/jenkins/plugins/docker_build_env/Docker.java index 89e22af..9c543e1 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/docker_build_env/Docker.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/docker_build_env/Docker.java @@ -45,10 +45,11 @@ public class Docker implements Closeable { private final DockerRegistryEndpoint registryEndpoint; private final boolean verbose; private final boolean privileged; + private final String additionalParameters; private final AbstractBuild build; private EnvVars envVars; - public Docker(DockerServerEndpoint dockerHost, String dockerInstallation, String credentialsId, AbstractBuild build, Launcher launcher, TaskListener listener, boolean verbose, boolean privileged) throws IOException, InterruptedException { + public Docker(DockerServerEndpoint dockerHost, String dockerInstallation, String credentialsId, AbstractBuild build, Launcher launcher, TaskListener listener, boolean verbose, boolean privileged, String additionalParameters) throws IOException, InterruptedException { this.dockerHost = dockerHost; this.dockerExecutable = DockerTool.getExecutable(dockerInstallation, Computer.currentComputer().getNode(), listener, build.getEnvironment(listener)); this.registryEndpoint = new DockerRegistryEndpoint(null, credentialsId); @@ -57,6 +58,7 @@ public class Docker implements Closeable { this.build = build; this.verbose = verbose | debug; this.privileged = privileged; + this.additionalParameters = additionalParameters; } @@ -186,7 +188,12 @@ public class Docker implements Closeable { ArgumentListBuilder args = dockerCommand() .add("run", "--tty", "--detach"); if (privileged) { - args.add( "--privileged"); + args.add("--privileged"); + } + if (!additionalParameters.isEmpty()) { + for(String additionalParameter: additionalParameters.split(" ")) { + args.add(additionalParameter); + } } args.add("--workdir", workdir); for (Map.Entry volume : volumes.entrySet()) { diff --git a/src/main/java/com/cloudbees/jenkins/plugins/docker_build_env/DockerBuildWrapper.java b/src/main/java/com/cloudbees/jenkins/plugins/docker_build_env/DockerBuildWrapper.java index fe16b23..2ac15d8 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/docker_build_env/DockerBuildWrapper.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/docker_build_env/DockerBuildWrapper.java @@ -61,6 +61,8 @@ public class DockerBuildWrapper extends BuildWrapper { private final boolean privileged; + private final String additionalParameters; + private String group; private String command; @@ -75,7 +77,7 @@ public class DockerBuildWrapper extends BuildWrapper { @DataBoundConstructor public DockerBuildWrapper(DockerImageSelector selector, String dockerInstallation, DockerServerEndpoint dockerHost, String dockerRegistryCredentials, boolean verbose, boolean privileged, - List volumes, String group, String command, + String additionalParameters, List volumes, String group, String command, boolean forcePull, String net, String memory, String cpu) { this.selector = selector; @@ -84,6 +86,7 @@ public class DockerBuildWrapper extends BuildWrapper { this.dockerRegistryCredentials = dockerRegistryCredentials; this.verbose = verbose; this.privileged = privileged; + this.additionalParameters = additionalParameters; this.volumes = volumes != null ? volumes : Collections.emptyList(); this.group = group; this.command = command; @@ -117,6 +120,10 @@ public class DockerBuildWrapper extends BuildWrapper { return privileged; } + public String getAdditionalParameters() { + return additionalParameters; + } + public List getVolumes() { return volumes; } @@ -141,7 +148,7 @@ public class DockerBuildWrapper extends BuildWrapper { @Override public Launcher decorateLauncher(final AbstractBuild build, final Launcher launcher, final BuildListener listener) throws IOException, InterruptedException, Run.RunnerAbortedException { - final Docker docker = new Docker(dockerHost, dockerInstallation, dockerRegistryCredentials, build, launcher, listener, verbose, privileged); + final Docker docker = new Docker(dockerHost, dockerInstallation, dockerRegistryCredentials, build, launcher, listener, verbose, privileged, additionalParameters); final BuiltInContainer runInContainer = new BuiltInContainer(docker); build.addAction(runInContainer); diff --git a/src/main/resources/com/cloudbees/jenkins/plugins/docker_build_env/DockerBuildWrapper/config.jelly b/src/main/resources/com/cloudbees/jenkins/plugins/docker_build_env/DockerBuildWrapper/config.jelly index 42a7a78..05d07f2 100644 --- a/src/main/resources/com/cloudbees/jenkins/plugins/docker_build_env/DockerBuildWrapper/config.jelly +++ b/src/main/resources/com/cloudbees/jenkins/plugins/docker_build_env/DockerBuildWrapper/config.jelly @@ -52,6 +52,9 @@ THE SOFTWARE. + + + diff --git a/src/main/resources/com/cloudbees/jenkins/plugins/docker_build_env/DockerBuildWrapper/help-additionalParameters.html b/src/main/resources/com/cloudbees/jenkins/plugins/docker_build_env/DockerBuildWrapper/help-additionalParameters.html new file mode 100644 index 0000000..2697e0c --- /dev/null +++ b/src/main/resources/com/cloudbees/jenkins/plugins/docker_build_env/DockerBuildWrapper/help-additionalParameters.html @@ -0,0 +1,4 @@ +
+ Adds arbitary parameters to Docker's run command. This is useful if you want to add specific capabilities + to your build. +
\ No newline at end of file diff --git a/src/test/java/com/cloudbees/jenkins/plugins/docker_build_env/FunctionalTests.java b/src/test/java/com/cloudbees/jenkins/plugins/docker_build_env/FunctionalTests.java index f3b199a..2f664a1 100644 --- a/src/test/java/com/cloudbees/jenkins/plugins/docker_build_env/FunctionalTests.java +++ b/src/test/java/com/cloudbees/jenkins/plugins/docker_build_env/FunctionalTests.java @@ -33,7 +33,7 @@ public class FunctionalTests { project.getBuildWrappersList().add( new DockerBuildWrapper( new PullDockerImageSelector("ubuntu:14.04"), - "", new DockerServerEndpoint("", ""), "", true, false, Collections.emptyList(), null, "cat", false, "bridge", null, null) + "", new DockerServerEndpoint("", ""), "", true, false, "", Collections.emptyList(), null, "cat", false, "bridge", null, null) ); project.getBuildersList().add(new Shell("lsb_release -a")); @@ -52,7 +52,7 @@ public class FunctionalTests { project.getBuildWrappersList().add( new DockerBuildWrapper( new DockerfileImageSelector(".", "$WORKSPACE/Dockerfile"), - "", new DockerServerEndpoint("", ""), "", true, false, Collections.emptyList(), null, "cat", false, "bridge", null, null) + "", new DockerServerEndpoint("", ""), "", true, false, "", Collections.emptyList(), null, "cat", false, "bridge", null, null) ); project.getBuildersList().add(new Shell("lsb_release -a"));