Skip to content

Commit b0d3fae

Browse files
committed
fix windows path issue and skip whoami on Windows for now
1 parent 20a2a26 commit b0d3fae

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

src/main/java/org/jenkinsci/plugins/docker/workflow/WithContainerStep.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ public static class Execution extends AbstractStepExecutionImpl {
114114

115115
LOGGER.log(Level.FINE, "reduced environment: {0}", envReduced);
116116
workspace.mkdirs(); // otherwise it may be owned by root when created for -v
117-
String ws = workspace.getRemote();
117+
String ws = getPath(workspace);
118118
toolName = step.toolName;
119119
DockerClient dockerClient = launcher.isUnix()
120120
? new DockerClient(launcher, node, toolName)
@@ -136,7 +136,7 @@ public static class Execution extends AbstractStepExecutionImpl {
136136

137137
FilePath tempDir = tempDir(workspace);
138138
tempDir.mkdirs();
139-
String tmp = tempDir.getRemote();
139+
String tmp = getPath(tempDir);
140140

141141
Map<String, String> volumes = new LinkedHashMap<String, String>();
142142
Collection<String> volumesFromContainers = new LinkedHashSet<String>();
@@ -190,6 +190,15 @@ public static class Execution extends AbstractStepExecutionImpl {
190190
return false;
191191
}
192192

193+
private String getPath(FilePath filePath)
194+
throws IOException, InterruptedException {
195+
if (launcher.isUnix()) {
196+
return filePath.getRemote();
197+
} else {
198+
return filePath.toURI().getPath().substring(1).replace("\\", "/");
199+
}
200+
}
201+
193202
// TODO use 1.652 use WorkspaceList.tempDir
194203
private static FilePath tempDir(FilePath ws) {
195204
return ws.sibling(ws.getName() + System.getProperty(WorkspaceList.class.getName(), "@") + "tmp");

src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@
3131
import hudson.model.Node;
3232
import hudson.util.ArgumentListBuilder;
3333
import hudson.util.VersionNumber;
34-
import org.jenkinsci.plugins.docker.commons.fingerprint.ContainerRecord;
35-
36-
import javax.annotation.CheckForNull;
37-
import javax.annotation.Nonnull;
3834
import java.io.BufferedReader;
3935
import java.io.ByteArrayOutputStream;
4036
import java.io.IOException;
@@ -44,18 +40,22 @@
4440
import java.text.ParseException;
4541
import java.text.SimpleDateFormat;
4642
import java.util.ArrayList;
43+
import java.util.Arrays;
4744
import java.util.Collection;
4845
import java.util.Collections;
4946
import java.util.Date;
50-
import java.util.Map;
5147
import java.util.List;
52-
import java.util.Arrays;
48+
import java.util.Map;
5349
import java.util.StringTokenizer;
5450
import java.util.concurrent.TimeUnit;
5551
import java.util.logging.Level;
5652
import java.util.logging.Logger;
5753
import java.util.regex.Matcher;
5854
import java.util.regex.Pattern;
55+
import javax.annotation.CheckForNull;
56+
import javax.annotation.Nonnull;
57+
import org.apache.commons.lang.StringUtils;
58+
import org.jenkinsci.plugins.docker.commons.fingerprint.ContainerRecord;
5959
import org.jenkinsci.plugins.docker.commons.tools.DockerTool;
6060
import org.kohsuke.accmod.Restricted;
6161
import org.kohsuke.accmod.restrictions.NoExternalUse;
@@ -106,7 +106,12 @@ public DockerClient(@Nonnull Launcher launcher, @CheckForNull Node node, @CheckF
106106
public String run(@Nonnull EnvVars launchEnv, @Nonnull String image, @CheckForNull String args, @CheckForNull String workdir, @Nonnull Map<String, String> volumes, @Nonnull Collection<String> volumesFromContainers, @Nonnull EnvVars containerEnv, @Nonnull String user, @Nonnull String... command) throws IOException, InterruptedException {
107107
ArgumentListBuilder argb = new ArgumentListBuilder();
108108

109-
argb.add("run", "-t", "-d", "-u", user);
109+
argb.add("run", "-t", "-d");
110+
111+
// Username might be empty because we are running on Windows
112+
if (StringUtils.isNotEmpty(user)) {
113+
argb.add("-u", user);
114+
}
110115
if (args != null) {
111116
argb.addTokenized(args);
112117
}
@@ -306,6 +311,10 @@ private LaunchResult launch(@CheckForNull @Nonnull EnvVars launchEnv, boolean qu
306311
* @return a {@link String} containing the <strong>uid:gid</strong>.
307312
*/
308313
public String whoAmI() throws IOException, InterruptedException {
314+
if (!launcher.isUnix()) {
315+
// Windows does not support username
316+
return "";
317+
}
309318
ByteArrayOutputStream userId = new ByteArrayOutputStream();
310319
launcher.launch().cmds("id", "-u").quiet(true).stdout(userId).start().joinWithTimeout(CLIENT_TIMEOUT, TimeUnit.SECONDS, launcher.getListener());
311320

@@ -367,6 +376,6 @@ public List<String> getVolumes(@Nonnull EnvVars launchEnv, String containerID) t
367376
if (volumes.isEmpty()) {
368377
return Collections.emptyList();
369378
}
370-
return Arrays.asList(volumes.split("\\n"));
379+
return Arrays.asList(volumes.replace("\\", "/").split("\\n"));
371380
}
372381
}

0 commit comments

Comments
 (0)