Hi,
I’m trying to access a Windows slave with SSH using Linux master Jenkins 2.235.5.
[08/26/20 15:24:48] [SSH] Checking java version of c:\JenkinsSlave/jdk/bin/java
Couldn't figure out the Java version of c:\JenkinsSlave/jdk/bin/java
The system cannot find the path specified.
[08/26/20 15:24:49] [SSH] Checking java version of C:\Program Files\Java\jdk1.8.0_161/bin/java
Couldn't figure out the Java version of C:\Program Files\Java\jdk1.8.0_161/bin/java
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
…
But when I try it from my other Windows Jenkins master 2.251 (my development server for testing purpose) it does connect without issue and find the proper java into the same path.
[08/21/20 13:48:50] [SSH] Starting agent process: cd "c:\JenkinsSlave" && "C:\Program Files\Java\jdk1.8.0_161\bin\java.exe" -jar remoting.jar -workDir c:\JenkinsSlave -jar-cache c:\JenkinsSlave/remoting/jarCache
Aug 21, 2020 1:48:50 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
Seem like the c:\Program Files\Java… is not escaped properly under Linux master. How to fix that? How can I fix this?
Should I escape the env var JAVA_HOME and add quote into it? will it break something else?
I’m trying to move the slave execution from my development Windows laptop to our official Linux master.
Thanks,
Jerome
--
You received this message because you are subscribed to the Google Groups "Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-use...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/YTOPR0101MB2315834EB1C8497CD210EEA4CD540%40YTOPR0101MB2315.CANPRD01.PROD.OUTLOOK.COM.
Well, that doesn’t really help to put quote into the JAVA_HOME variable either:
[08/26/20 16:48:23] [SSH] Checking java version of "C:\Program Files\Java\jdk1.8.0_161"/bin/java
Couldn't figure out the Java version of "C:\Program Files\Java\jdk1.8.0_161"/bin/java
'"C:\Program Files\Java\jdk1.8.0_161"' is not recognized as an internal or external command,
operable program or batch file.
I guess I will just install Java into a non space path, feel like the 90’ avoid all space in path for bad path handling… I hardly believe I’m the first one to install Java into default Program Files folder for this?! Anyway copy time to c:\Java
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CAPiUgVfLE6ybdjjMgzrpVt9UNCB0MF6CBTndkZWgXApOMnv5xQ%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CAPiUgVfLE6ybdjjMgzrpVt9UNCB0MF6CBTndkZWgXApOMnv5xQ%40mail.gmail.com.
WARNING, the following message contain strong opinion, if that do not suit you, stop reading now.
Don’t worry, I hate all Java equally... they fail the only promise they ever had, run everywhere… I hope this language rot in hell.
From: jenkins...@googlegroups.com <jenkins...@googlegroups.com>
On Behalf Of Mark Waite
Sent: August 26, 2020 4:52 PM
To: Jenkins Users <jenkins...@googlegroups.com>
Subject: Re: Windows slave by ssh
I've preferred to install AdoptOpenJDK in a location that does not include spaces. Oracle JDK licensing is more restrictive than I'm willing to accept and I want the latest Java 8 fixes.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CAO49JtGh_FntpKrRaEDCCtD-Xx59g8gKGvhQdmGV0tH4_MmvYw%40mail.gmail.com.
Hi,
Reinstalling Java into a path like c:\Java work just fine now. Wonder why the Linux and the Windows master doesn’t show the same behavior on this? Is this code part only for *nix platform?
Anyway, thanks for the pointer,
Jerome
From: jenkins...@googlegroups.com <jenkins...@googlegroups.com> On Behalf Of Slide
Sent: August 26, 2020 4:23 PM
To: Jenkins User Mailing List <jenkins...@googlegroups.com>
Subject: Re: Windows slave by ssh
It looks like this code would need to be updated to handle when there are spaces: https://github.com/jenkinsci/ssh-slaves-plugin/blob/master/src/main/java/hudson/plugins/sshslaves/JavaVersionChecker.java#L91. I have the reverse, a Windows controller and Linux agents. I specify the JAVA_HOME environment variable in my agent configuration and that works. Can you try that?
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CAPiUgVfLE6ybdjjMgzrpVt9UNCB0MF6CBTndkZWgXApOMnv5xQ%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/YTOPR0101MB2315DF8810480BC8915BEAF8CD540%40YTOPR0101MB2315.CANPRD01.PROD.OUTLOOK.COM.
Sorry to be a Johnny come lately – but we have only used SSH launch of windows for quite a long time now.
We use Cygwin to do so. You can use any SSH server though.
The most important thing is to ensure Java’s home has no spaces in the path.
The second most important thing is to use mixed pathing constructs. E.g. javaPath='C:/programs.x64/Java/jdk-14/bin/java note the forward slashes. It is a happy middle ground for bash and java.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CAPiUgVfES%3Dr9KLU37ZFfV7ujuS4gjDmPccEuk%2BNnGmg0GvYZCw%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/1ef301d67bf2%24e9099630%24bb1cc290%24%40pdinc.us.
This is exactly what I’m using now, not more need for Cygwin for ssh (about time Microsoft 😉). Remove any space from the JAVA_HOME path solve the issue, but the default install path for Java is inside the Program Files folders, so by default it has a space. Not supporting spaces (and probably other character) is a bug. It’s not a big issue, but this should be fix. As for the \ or /, this should be handle by the source code and perform the right conversion to node native format. In my script I always use *nix / path and convert them to native before running the actual command in a shell. I even made some Groovy pipeline functions to be platform agnostic as much as possible, the default implementation force us to put if(isUnix()) everywhere and it’s annoying. Having a function to manipulate the files and folders (create, remove, touch, move, rename) should be there by default for CI pipelines and be platform agnostic. This is pretty basic stuff.
This is where you realize Qt, C# and Python are way ahead into path manipulation. Do a little as possible into Groovy-ish language and use Ansible or Python scripts to do the actual work lifting, made my life so much less painful.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CAPiUgVcfDgExQ_Dq0fmFqq7cdk51sAuKQPpG97raRfR6JwjifA%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/YTOPR0101MB231531FEA65DBE1914E14D9FCD550%40YTOPR0101MB2315.CANPRD01.PROD.OUTLOOK.COM.
Why only escape the command when it contains space, you could always do it, so other characters would also be properly escaped, the if is useless.
if(javaCommand.contains(" ")) { |
|
|
javaCommand = "\"" + javaCommand + "\""; |
||
} |
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CAPiUgVevYf_T0dCfYF6uMBgK0C4vJNV-jHa2DFqsV9wGtuRPmg%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/YTOPR0101MB2315B53FCE5AAAC3B3C93D1ACD550%40YTOPR0101MB2315.CANPRD01.PROD.OUTLOOK.COM.