From 7df72f44846d3abce92ff1d5c320f14bc95f972d Mon Sep 17 00:00:00 2001 From: Stefan Lengauer Date: Fri, 6 Oct 2017 12:08:37 +0200 Subject: [PATCH 1/2] dont append user and selinux flags if on windows slave --- .../plugins/docker/workflow/client/DockerClient.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java b/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java index 18de15fc6..f6152ba0f 100644 --- a/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java +++ b/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java @@ -110,8 +110,13 @@ public DockerClient(@Nonnull Launcher launcher, @CheckForNull Node node, @CheckF */ public String run(@Nonnull EnvVars launchEnv, @Nonnull String image, @CheckForNull String args, @CheckForNull String workdir, @Nonnull Map volumes, @Nonnull Collection volumesFromContainers, @Nonnull EnvVars containerEnv, @Nonnull String user, @Nonnull String entrypoint) throws IOException, InterruptedException { ArgumentListBuilder argb = new ArgumentListBuilder(); + boolean iswin = !launcher.isUnix(); + + argb.add("run", "-t", "-d"); + if (!iswin) { + argb.add("-u", user); + } - argb.add("run", "-t", "-d", "-u", user); if (args != null) { argb.addTokenized(args); } @@ -120,7 +125,7 @@ public String run(@Nonnull EnvVars launchEnv, @Nonnull String image, @CheckForNu argb.add("-w", workdir); } for (Map.Entry volume : volumes.entrySet()) { - argb.add("-v", volume.getKey() + ":" + volume.getValue() + ":rw,z"); + argb.add("-v", volume.getKey() + ":" + volume.getValue() + (iswin ? ":rw" : ":rw,z")); } for (String containerId : volumesFromContainers) { argb.add("--volumes-from", containerId); From 92a3820b701427a778a8435cda1d77768bb17656 Mon Sep 17 00:00:00 2001 From: Stefan Lengauer Date: Thu, 28 Jun 2018 12:13:13 +0200 Subject: [PATCH 2/2] - fix process detection for windows container --- .../docker/workflow/client/DockerClient.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java b/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java index b56a1064c..029b6d051 100644 --- a/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java +++ b/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java @@ -140,7 +140,13 @@ public String run(@Nonnull EnvVars launchEnv, @Nonnull String image, @CheckForNu } public List listProcess(@Nonnull EnvVars launchEnv, @Nonnull String containerId) throws IOException, InterruptedException { - LaunchResult result = launch(launchEnv, false, "top", containerId, "-eo", "pid,comm"); + LaunchResult result; + boolean iswin = !launcher.isUnix(); + if (iswin) { + result = launch(launchEnv, false, "top", containerId); + } else { + result = launch(launchEnv, false, "top", containerId, "-eo", "pid,comm"); + } if (result.getStatus() != 0) { throw new IOException(String.format("Failed to run top '%s'. Error: %s", containerId, result.getErr())); } @@ -154,8 +160,12 @@ public List listProcess(@Nonnull EnvVars launchEnv, @Nonnull String cont if (stringTokenizer.countTokens() < 2) { throw new IOException("Unexpected `docker top` output : "+line); } - stringTokenizer.nextToken(); // PID - processes.add(stringTokenizer.nextToken()); // COMMAND + // Somehow docker top only displays the process list reliably when using 'pid,comm' so ignore pid if on linux + if (!iswin) { + stringTokenizer.nextToken(); + } + // Windows containers are started without the .exe suffix to cat but top returns cat.exe + processes.add(iswin ? stringTokenizer.nextToken().replace(".exe","") : stringTokenizer.nextToken()); // COMMAND } } return processes;