Skip to content

Commit 40eb89e

Browse files
authored
JENKINS-72516 fix WARNING: You are running an old version of Maven (#912)
When executing in a docker agent, the call to MasterToSlaveFileCallable will not execute on the docker agent, but on the launcher agent. Changes the code to use launcher.launch() like in the readFromProcess() method which is aware of the launcher decorator.
1 parent aa578a2 commit 40eb89e

File tree

1 file changed

+18
-37
lines changed

1 file changed

+18
-37
lines changed

pipeline-maven/src/main/java/org/jenkinsci/plugins/pipeline/maven/WithMavenStepExecution2.java

Lines changed: 18 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
import hudson.Functions;
4242
import hudson.Launcher;
4343
import hudson.Launcher.ProcStarter;
44-
import hudson.Platform;
4544
import hudson.Proc;
4645
import hudson.Util;
4746
import hudson.console.ConsoleLogFilter;
@@ -53,16 +52,12 @@
5352
import hudson.model.Node;
5453
import hudson.model.Run;
5554
import hudson.model.TaskListener;
56-
import hudson.remoting.VirtualChannel;
5755
import hudson.slaves.WorkspaceList;
5856
import hudson.tasks.Maven;
5957
import hudson.tasks.Maven.MavenInstallation;
60-
import java.io.BufferedReader;
6158
import java.io.ByteArrayOutputStream;
62-
import java.io.File;
6359
import java.io.IOException;
6460
import java.io.InputStream;
65-
import java.io.InputStreamReader;
6661
import java.net.URL;
6762
import java.security.CodeSource;
6863
import java.util.ArrayList;
@@ -76,11 +71,9 @@
7671
import java.util.Optional;
7772
import java.util.UUID;
7873
import java.util.function.Function;
79-
import java.util.function.Predicate;
8074
import java.util.logging.Level;
8175
import java.util.logging.Logger;
8276
import java.util.stream.Collectors;
83-
import jenkins.MasterToSlaveFileCallable;
8477
import jenkins.model.Jenkins;
8578
import jenkins.mvn.DefaultGlobalSettingsProvider;
8679
import jenkins.mvn.DefaultSettingsProvider;
@@ -667,37 +660,25 @@ private String obtainMvnExecutableFromMavenInstallation(String mavenInstallation
667660

668661
private MavenVersion readMavenVersion(String mvnExecPath) {
669662
try {
670-
String result = new FilePath(ws.getChannel(), mvnExecPath).act(new MasterToSlaveFileCallable<String>() {
671-
672-
private static final long serialVersionUID = -1064011914865943982L;
673-
674-
@Override
675-
public String invoke(File f, VirtualChannel channel) throws IOException, InterruptedException {
676-
ProcessBuilder builder = new ProcessBuilder();
677-
if (Platform.current() == Platform.WINDOWS) {
678-
builder.command("cmd.exe", "/c", "\"" + f.getAbsolutePath() + "\" --version");
679-
} else {
680-
builder.command("sh", "-c", "\"" + f.getAbsolutePath() + "\" --version");
681-
}
682-
Process process = builder.start();
683-
try (InputStreamReader is = new InputStreamReader(process.getInputStream(), "UTF-8");
684-
BufferedReader reader = new BufferedReader(is)) {
685-
Optional<String> versionLine = reader.lines()
686-
.filter(MavenVersionUtils.containsMavenVersion())
687-
.findFirst();
688-
int exitCode = process.waitFor();
689-
if (exitCode != 0) {
690-
console.trace("[withMaven] failed to read Maven version (" + exitCode + "): "
691-
+ new String(process.getErrorStream().readAllBytes(), "UTF-8"));
692-
return null;
693-
}
694-
return versionLine.orElse("");
695-
}
663+
try (ByteArrayOutputStream stdout = new ByteArrayOutputStream();
664+
ByteArrayOutputStream stderr = new ByteArrayOutputStream()) {
665+
ProcStarter ps = launcher.launch();
666+
Proc p = launcher.launch(
667+
ps.cmds(mvnExecPath, "--version").stdout(stdout).stderr(stderr));
668+
int exitCode = p.join();
669+
if (exitCode == 0) {
670+
Optional<String> version = stdout.toString(getComputer().getDefaultCharset())
671+
.lines()
672+
.filter(MavenVersionUtils.containsMavenVersion())
673+
.findFirst();
674+
console.trace("[withMaven] found Maven version: " + version.orElse("none"));
675+
return version.map(MavenVersionUtils::parseMavenVersion).orElse(MavenVersion.UNKNOWN);
676+
} else {
677+
console.trace("[withMaven] failed to read Maven version (" + exitCode + "): "
678+
+ stderr.toString(getComputer().getDefaultCharset()));
679+
return MavenVersion.UNKNOWN;
696680
}
697-
});
698-
Optional<String> version = Optional.ofNullable(result).filter(Predicate.not(String::isBlank));
699-
console.trace("[withMaven] found Maven version: " + version.orElse("none"));
700-
return version.map(MavenVersionUtils::parseMavenVersion).orElse(MavenVersion.UNKNOWN);
681+
}
701682
} catch (Exception ex) {
702683
console.trace("[withMaven] failed to read Maven version: " + ex.getMessage());
703684
return MavenVersion.UNKNOWN;

0 commit comments

Comments
 (0)