Skip to content

Commit db78481

Browse files
committed
chore: rebase changes
1 parent 370e647 commit db78481

72 files changed

Lines changed: 1071 additions & 572 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

pom.xml

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<revision>3</revision>
2929
<changelist>999999-SNAPSHOT</changelist>
3030
<jenkins.baseline>2.479</jenkins.baseline>
31-
<jenkins.version>${jenkins.baseline}.1</jenkins.version>
31+
<jenkins.version>${jenkins.baseline}.3</jenkins.version>
3232
<hpi.compatibleSinceVersion>3.0.0</hpi.compatibleSinceVersion>
3333
</properties>
3434

@@ -132,9 +132,20 @@
132132
</exclusions>
133133
</dependency>
134134
<dependency>
135-
<groupId>org.jenkins-ci.modules</groupId>
136-
<artifactId>sshd</artifactId>
137-
<version>3.1.0</version>
135+
<groupId>io.jenkins.plugins.mina-sshd-api</groupId>
136+
<artifactId>mina-sshd-api-common</artifactId>
137+
</dependency>
138+
<dependency>
139+
<groupId>io.jenkins.plugins.mina-sshd-api</groupId>
140+
<artifactId>mina-sshd-api-core</artifactId>
141+
</dependency>
142+
<dependency>
143+
<groupId>io.jenkins.plugins.mina-sshd-api</groupId>
144+
<artifactId>mina-sshd-api-scp</artifactId>
145+
</dependency>
146+
<dependency>
147+
<groupId>io.jenkins.plugins</groupId>
148+
<artifactId>eddsa-api</artifactId>
138149
</dependency>
139150
<dependency>
140151
<groupId>org.jenkins-ci.test</groupId>
@@ -152,18 +163,11 @@
152163
<groupId>io.jenkins</groupId>
153164
<artifactId>configuration-as-code</artifactId>
154165
<scope>test</scope>
155-
<version>1.52</version>
156166
</dependency>
157167
<dependency>
158168
<groupId>io.jenkins.configuration-as-code</groupId>
159169
<artifactId>test-harness</artifactId>
160170
<scope>test</scope>
161-
<version>1.52</version>
162-
</dependency>
163-
<dependency>
164-
<groupId>org.jenkins-ci.main</groupId>
165-
<artifactId>jenkins-test-harness</artifactId>
166-
<version>1648.ved2b9ab8b19e</version>
167171
</dependency>
168172
<!-- Jupiter/JUnit 5 testcontainers https://java.testcontainers.org/test_framework_integration/junit_5/ -->
169173
<dependency>
@@ -172,23 +176,6 @@
172176
<version>1.20.6</version>
173177
<scope>test</scope>
174178
</dependency>
175-
<dependency>
176-
<groupId>org.apache.sshd</groupId>
177-
<artifactId>sshd-scp</artifactId>
178-
<version>2.7.0</version>
179-
</dependency>
180-
<!--
181-
<dependency>
182-
<groupId>org.apache.mina</groupId>
183-
<artifactId>mina-core</artifactId>
184-
<version>2.1.4</version>
185-
</dependency>
186-
<dependency>
187-
<groupId>org.apache.sshd</groupId>
188-
<artifactId>sshd-mina</artifactId>
189-
<version>2.7.0</version>
190-
</dependency>
191-
-->
192179
<!-- TODO remove in future versions -->
193180
<dependency>
194181
<groupId>org.jenkins-ci.plugins</groupId>

src/main/java/hudson/plugins/sshslaves/SSHConnector.java

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,39 +27,34 @@
2727
import com.cloudbees.plugins.credentials.CredentialsProvider;
2828
import com.cloudbees.plugins.credentials.common.StandardUsernameCredentials;
2929
import com.cloudbees.plugins.credentials.common.StandardUsernameListBoxModel;
30+
import com.trilead.ssh2.Connection;
3031
import edu.umd.cs.findbugs.annotations.NonNull;
3132
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
32-
import java.util.Collections;
33-
import io.jenkins.plugins.sshbuildagents.Messages;
34-
import io.jenkins.plugins.sshbuildagents.ssh.Connection;
35-
import org.apache.commons.lang.StringUtils;
36-
import org.kohsuke.stapler.AncestorInPath;
37-
import org.kohsuke.stapler.DataBoundConstructor;
38-
import org.kohsuke.stapler.DataBoundSetter;
39-
import org.kohsuke.stapler.QueryParameter;
40-
import org.kohsuke.stapler.interceptor.RequirePOST;
4133
import hudson.Extension;
42-
import hudson.model.Computer;
4334
import hudson.model.ItemGroup;
4435
import hudson.model.TaskListener;
4536
import hudson.plugins.sshslaves.verifiers.SshHostKeyVerificationStrategy;
4637
import hudson.security.ACL;
47-
import hudson.security.AccessControlled;
4838
import hudson.slaves.ComputerConnector;
4939
import hudson.slaves.ComputerConnectorDescriptor;
5040
import hudson.util.FormValidation;
5141
import hudson.util.ListBoxModel;
42+
import java.util.Collections;
43+
5244
import jenkins.model.Jenkins;
53-
import com.cloudbees.jenkins.plugins.sshcredentials.SSHAuthenticator;
54-
import com.cloudbees.plugins.credentials.CredentialsProvider;
55-
import com.cloudbees.plugins.credentials.common.StandardUsernameCredentials;
56-
import com.cloudbees.plugins.credentials.common.StandardUsernameListBoxModel;
45+
import org.apache.commons.lang.StringUtils;
46+
import org.kohsuke.stapler.AncestorInPath;
47+
import org.kohsuke.stapler.DataBoundConstructor;
48+
5749
import static hudson.Util.fixEmpty;
5850
import static hudson.Util.fixEmptyAndTrim;
59-
import static hudson.plugins.sshslaves.SSHLauncher.DEFAULT_LAUNCH_TIMEOUT_SECONDS;
60-
import static hudson.plugins.sshslaves.SSHLauncher.DEFAULT_MAX_NUM_RETRIES;
61-
import static hudson.plugins.sshslaves.SSHLauncher.DEFAULT_RETRY_WAIT_TIME;
62-
import static hudson.plugins.sshslaves.SSHLauncher.DEFAULT_SSH_PORT;
51+
import static hudson.plugins.sshslaves.SSHLauncher.*;
52+
53+
import hudson.model.Computer;
54+
import hudson.security.AccessControlled;
55+
import org.kohsuke.stapler.DataBoundSetter;
56+
import org.kohsuke.stapler.QueryParameter;
57+
import org.kohsuke.stapler.interceptor.RequirePOST;
6358

6459
/**
6560
* {@link ComputerConnector} for {@link SSHLauncher}.

src/main/java/hudson/plugins/sshslaves/SSHLauncher.java

Lines changed: 51 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,13 @@
2323
*/
2424
package hudson.plugins.sshslaves;
2525

26-
import java.io.ByteArrayOutputStream;
27-
import java.io.IOException;
28-
import java.io.InputStream;
29-
import java.io.OutputStream;
30-
import java.io.PrintStream;
31-
import java.io.UnsupportedEncodingException;
32-
import java.nio.charset.Charset;
33-
import java.security.MessageDigest;
34-
import java.security.NoSuchAlgorithmException;
35-
import java.text.MessageFormat;
36-
import java.util.Collections;
37-
import java.util.Date;
38-
import java.util.HashSet;
39-
import java.util.List;
40-
import java.util.Set;
41-
import java.util.concurrent.Callable;
42-
import java.util.concurrent.CancellationException;
43-
import java.util.concurrent.ExecutionException;
44-
import java.util.concurrent.ExecutorService;
45-
import java.util.concurrent.Executors;
46-
import java.util.concurrent.Future;
47-
import java.util.concurrent.TimeUnit;
48-
import java.util.logging.Level;
49-
import java.util.logging.Logger;
26+
import com.cloudbees.jenkins.plugins.sshcredentials.SSHAuthenticator;
27+
import com.cloudbees.plugins.credentials.CredentialsMatchers;
28+
import com.cloudbees.plugins.credentials.CredentialsProvider;
29+
import com.cloudbees.plugins.credentials.common.StandardUsernameCredentials;
30+
import com.cloudbees.plugins.credentials.domains.HostnamePortRequirement;
31+
import com.cloudbees.plugins.credentials.domains.SchemeRequirement;
32+
import com.cloudbees.plugins.credentials.common.StandardUsernameListBoxModel;
5033
import com.trilead.ssh2.ChannelCondition;
5134
import com.trilead.ssh2.Connection;
5235
import com.trilead.ssh2.SCPClient;
@@ -57,17 +40,6 @@
5740
import edu.umd.cs.findbugs.annotations.CheckForNull;
5841
import edu.umd.cs.findbugs.annotations.NonNull;
5942
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
60-
import io.jenkins.plugins.sshbuildagents.Messages;
61-
import org.apache.commons.io.IOUtils;
62-
import org.apache.commons.lang.StringUtils;
63-
import org.jenkinsci.Symbol;
64-
import org.kohsuke.accmod.Restricted;
65-
import org.kohsuke.accmod.restrictions.NoExternalUse;
66-
import org.kohsuke.stapler.AncestorInPath;
67-
import org.kohsuke.stapler.DataBoundConstructor;
68-
import org.kohsuke.stapler.DataBoundSetter;
69-
import org.kohsuke.stapler.QueryParameter;
70-
import org.kohsuke.stapler.interceptor.RequirePOST;
7143
import hudson.AbortException;
7244
import hudson.EnvVars;
7345
import hudson.Extension;
@@ -93,16 +65,43 @@
9365
import hudson.util.ListBoxModel;
9466
import hudson.util.NamingThreadFactory;
9567
import java.util.Collections;
96-
import io.jenkins.plugins.sshbuildagents.ssh.Connection;
97-
import hudson.util.NullStream;
9868
import jenkins.model.Jenkins;
99-
import com.cloudbees.jenkins.plugins.sshcredentials.SSHAuthenticator;
100-
import com.cloudbees.plugins.credentials.CredentialsMatchers;
101-
import com.cloudbees.plugins.credentials.CredentialsProvider;
102-
import com.cloudbees.plugins.credentials.common.StandardUsernameCredentials;
103-
import com.cloudbees.plugins.credentials.common.StandardUsernameListBoxModel;
104-
import com.cloudbees.plugins.credentials.domains.HostnamePortRequirement;
105-
import com.cloudbees.plugins.credentials.domains.SchemeRequirement;
69+
import org.apache.commons.io.IOUtils;
70+
import org.apache.commons.lang.StringUtils;
71+
import org.jenkinsci.Symbol;
72+
import org.kohsuke.accmod.Restricted;
73+
import org.kohsuke.accmod.restrictions.NoExternalUse;
74+
import org.kohsuke.stapler.AncestorInPath;
75+
import org.kohsuke.stapler.DataBoundConstructor;
76+
import org.kohsuke.stapler.DataBoundSetter;
77+
import org.kohsuke.stapler.QueryParameter;
78+
import org.kohsuke.stapler.interceptor.RequirePOST;
79+
80+
import java.io.ByteArrayOutputStream;
81+
import java.io.IOException;
82+
import java.io.InputStream;
83+
import java.io.OutputStream;
84+
import java.io.PrintStream;
85+
import java.lang.InterruptedException;
86+
import java.io.UnsupportedEncodingException;
87+
import java.nio.charset.Charset;
88+
import java.security.MessageDigest;
89+
import java.security.NoSuchAlgorithmException;
90+
import java.text.MessageFormat;
91+
import java.util.Date;
92+
import java.util.HashSet;
93+
import java.util.List;
94+
import java.util.Set;
95+
import java.util.concurrent.Callable;
96+
import java.util.concurrent.CancellationException;
97+
import java.util.concurrent.ExecutionException;
98+
import java.util.concurrent.ExecutorService;
99+
import java.util.concurrent.Executors;
100+
import java.util.concurrent.Future;
101+
import java.util.concurrent.TimeUnit;
102+
import java.util.logging.Level;
103+
import java.util.logging.Logger;
104+
106105
import static hudson.Util.fixEmpty;
107106
import static java.util.logging.Level.WARNING;
108107

@@ -363,16 +362,6 @@ public String getJvmOptions() {
363362
return jvmOptions == null ? "" : jvmOptions;
364363
}
365364

366-
/**
367-
* Gets the optional java command to use to launch the agent JVM.
368-
* @return The optional java command to use to launch the agent JVM.
369-
*/
370-
@SuppressWarnings("unused") // Used by vsphere-cloud-plugin
371-
@Deprecated
372-
public String getJavaPath() {
373-
return javaPath == null ? "" : javaPath;
374-
}
375-
376365
/**
377366
* Gets the formatted current time stamp.
378367
*
@@ -427,54 +416,13 @@ public void launch(final SlaveComputer computer, final TaskListener listener) th
427416
new NamingThreadFactory(Executors.defaultThreadFactory(), "SSHLauncher.launch for '" + computer.getName() + "' node"));
428417
Set<Callable<Boolean>> callables = new HashSet<>();
429418
callables.add(() -> {
430-
public Boolean call() throws InterruptedException {
431-
Boolean rval = Boolean.FALSE;
432-
try {
433-
String[] preferredKeyAlgorithms = getSshHostKeyVerificationStrategyDefaulted().getPreferredKeyAlgorithms(computer);
434-
if (preferredKeyAlgorithms != null && preferredKeyAlgorithms.length > 0) { // JENKINS-44832
435-
connection.setServerHostKeyAlgorithms(preferredKeyAlgorithms);
436-
} else {
437-
listener.getLogger().println("Warning: no key algorithms provided; JENKINS-42959 disabled");
438-
}
439-
440-
listener.getLogger().println(logConfiguration());
441-
442-
openConnection(listener, computer);
443-
444-
verifyNoHeaderJunk(listener);
445-
reportEnvironment(listener);
446-
447-
final String workingDirectory = getWorkingDirectory(computer);
448-
if (workingDirectory == null) {
449-
listener.error("Cannot get the working directory for " + computer);
450-
return Boolean.FALSE;
451-
}
452-
453-
String java = "java";
454-
if (StringUtils.isNotBlank(javaPath)) {
455-
java = expandExpression(computer, javaPath);
456-
} else {
457-
checkJavaIsInPath(listener);
458-
}
459-
460-
copyAgentJar(listener, workingDirectory);
461-
462-
startAgent(computer, listener, java, workingDirectory);
463-
464-
PluginImpl.register(connection);
465-
rval = Boolean.TRUE;
466-
} catch (RuntimeException|Error e) {
467-
String msg = Messages.SSHLauncher_UnexpectedError();
468-
if(StringUtils.isNotBlank(e.getMessage())){
469-
msg = e.getMessage();
470-
}
471-
e.printStackTrace(listener.error(msg));
472-
} catch (AbortException e) {
473-
listener.getLogger().println(e.getMessage());
474-
} catch (IOException e) {
475-
e.printStackTrace(listener.getLogger());
476-
} finally {
477-
return rval;
419+
Boolean rval = Boolean.FALSE;
420+
try {
421+
String[] preferredKeyAlgorithms = getSshHostKeyVerificationStrategyDefaulted().getPreferredKeyAlgorithms(computer);
422+
if (preferredKeyAlgorithms != null && preferredKeyAlgorithms.length > 0) { // JENKINS-44832
423+
connection.setServerHostKeyAlgorithms(preferredKeyAlgorithms);
424+
} else {
425+
listener.getLogger().println("Warning: no key algorithms provided; JENKINS-42959 disabled");
478426
}
479427

480428
listener.getLogger().println(logConfiguration());
@@ -552,28 +500,6 @@ public Boolean call() throws InterruptedException {
552500
}
553501
}
554502

555-
/**
556-
* try to run the Java command in the PATH ad report its version.
557-
* @param listener lister to print the output of the java command.
558-
*/
559-
private void checkJavaIsInPath(TaskListener listener) {
560-
String msg = "Java is not in the PATH nor configured with the javaPath setting,"
561-
+ " Jenkins will try to guess where is Java, "
562-
+ "this guess will be removed in the future. :"
563-
+ getDescriptor().getDisplayName();
564-
int ret = 0;
565-
try {
566-
listener.getLogger().println("Checking Java version in the PATH");
567-
ret = connection.exec("java -version", listener.getLogger());
568-
} catch (Exception e){
569-
ret = -1;
570-
}
571-
if(ret != 0){
572-
LOGGER.log(WARNING, msg);
573-
listener.getLogger().println(msg);
574-
}
575-
}
576-
577503
/**
578504
* Called to terminate the SSH connection. Used liberally when we back out from an error.
579505
*/
@@ -860,7 +786,7 @@ private void copySlaveJarUsingSCP(TaskListener listener, String workingDirectory
860786
}
861787

862788
// delete the agent jar as we do with SFTP
863-
connection.exec("rm " + workingDirectory + SLASH_AGENT_JAR, new NullStream());
789+
connection.exec("rm " + workingDirectory + SLASH_AGENT_JAR, OutputStream.nullOutputStream());
864790

865791
// SCP it to the agent. hudson.Util.ByteArrayOutputStream2 doesn't work for this. It pads the byte array.
866792
listener.getLogger().println(Messages.SSHLauncher_CopyingAgentJar(getTimestamp()));

src/main/java/hudson/plugins/sshslaves/verifiers/JenkinsTrilead9VersionSupport.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package hudson.plugins.sshslaves.verifiers;
22

3-
import java.io.IOException;
4-
import java.util.ArrayList;
5-
import java.util.List;
63
import com.trilead.ssh2.signature.KeyAlgorithm;
74
import com.trilead.ssh2.signature.KeyAlgorithmManager;
8-
import io.jenkins.plugins.sshbuildagents.Messages;
5+
import hudson.plugins.sshslaves.Messages;
96
import org.kohsuke.accmod.Restricted;
107
import org.kohsuke.accmod.restrictions.NoExternalUse;
118

9+
import java.io.IOException;
10+
import java.util.ArrayList;
11+
import java.util.List;
12+
1213
/**
1314
* @author Michael Clarke
1415
*/

0 commit comments

Comments
 (0)