diff --git a/core/src/main/java/hudson/Functions.java b/core/src/main/java/hudson/Functions.java index 663de31dd6..3ce3e03883 100644 --- a/core/src/main/java/hudson/Functions.java +++ b/core/src/main/java/hudson/Functions.java @@ -1874,7 +1874,7 @@ public class Functions { /** * Obtains the host name of the Hudson server that clients can use to talk back to. *

- * This is primarily used in {@code slave-agent.jnlp.jelly} to specify the destination + * This is primarily used in {@code jenkins-agent.jnlp.jelly} to specify the destination * that the agents talk to. */ public String getServerName() { diff --git a/core/src/main/java/hudson/slaves/SlaveComputer.java b/core/src/main/java/hudson/slaves/SlaveComputer.java index eff15c5dd1..9d79829343 100644 --- a/core/src/main/java/hudson/slaves/SlaveComputer.java +++ b/core/src/main/java/hudson/slaves/SlaveComputer.java @@ -814,13 +814,24 @@ public class SlaveComputer extends Computer { @WebMethod(name="slave-agent.jnlp") public HttpResponse doSlaveAgentJnlp(StaplerRequest req, StaplerResponse res) { - return new EncryptedSlaveAgentJnlpFile(this, "slave-agent.jnlp.jelly", getName(), CONNECT); + + return doJenkinsAgentJnlp(req, res); + } + + @WebMethod(name="jenkins-agent.jnlp") + public HttpResponse doJenkinsAgentJnlp(StaplerRequest req, StaplerResponse res) { + return new EncryptedSlaveAgentJnlpFile(this, "jenkins-agent.jnlp.jelly", getName(), CONNECT); } class LowPermissionResponse { + @WebMethod(name="jenkins-agent.jnlp") + public HttpResponse doJenkinsAgentJnlp(StaplerRequest req, StaplerResponse res) { + return SlaveComputer.this.doJenkinsAgentJnlp(req, res); + } + @WebMethod(name="slave-agent.jnlp") public HttpResponse doSlaveAgentJnlp(StaplerRequest req, StaplerResponse res) { - return SlaveComputer.this.doSlaveAgentJnlp(req, res); + return SlaveComputer.this.doJenkinsAgentJnlp(req, res); } } diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index 8cdfaa0cf7..9286a93bd4 100644 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -4820,7 +4820,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve } // TODO SlaveComputer.doSlaveAgentJnlp; there should be an annotation to request unprotected access - if (restOfPath.matches("/computer/[^/]+/slave-agent[.]jnlp") + if ((isAgentJnlpPath(restOfPath, "jenkins") || (isAgentJnlpPath(restOfPath, "slave"))) && "true".equals(Stapler.getCurrentRequest().getParameter("encrypt"))) { return false; } @@ -4828,6 +4828,10 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve return true; } + private boolean isAgentJnlpPath(String restOfPath, String prefix) { + return restOfPath.matches("/computer/[^/]+/" + prefix+ "-agent[.]jnlp"); + } + /** * Gets a list of unprotected root actions. * These URL prefixes should be exempted from access control checks by container-managed security. diff --git a/core/src/main/resources/hudson/slaves/JNLPLauncher/main.jelly b/core/src/main/resources/hudson/slaves/JNLPLauncher/main.jelly index 404e30b9f0..3cade5dd6a 100644 --- a/core/src/main/resources/hudson/slaves/JNLPLauncher/main.jelly +++ b/core/src/main/resources/hudson/slaves/JNLPLauncher/main.jelly @@ -41,7 +41,7 @@ THE SOFTWARE.

  • - + ${%launch agent} ${%Launch agent from browser} @@ -64,13 +64,13 @@ THE SOFTWARE.

    ${%Run from agent command line:}

    -
    javaws ${h.inferHudsonURL(request)}${it.url}slave-agent.jnlp
    +
    javaws ${h.inferHudsonURL(request)}${it.url}jenkins-agent.jnlp
  • ${%Or if the agent is headless:}

    -
    java${it.launcher.vmargs == null ? '' : ' ' + it.launcher.vmargs} -jar agent.jar -jnlpUrl ${h.inferHudsonURL(request)}${it.url}slave-agent.jnlp ${it.launcher.getWorkDirOptions(it)}
    +
    java${it.launcher.vmargs == null ? '' : ' ' + it.launcher.vmargs} -jar agent.jar -jnlpUrl ${h.inferHudsonURL(request)}${it.url}jenkins-agent.jnlp ${it.launcher.getWorkDirOptions(it)}
  • @@ -79,12 +79,12 @@ THE SOFTWARE. ${%Run from agent command line:}

    -
    java${it.launcher.vmargs == null ? '' : ' ' + it.launcher.vmargs} -jar agent.jar -jnlpUrl ${h.inferHudsonURL(request)}${it.url}slave-agent.jnlp -secret ${it.jnlpMac} ${it.launcher.getWorkDirOptions(it)}
    +
    java${it.launcher.vmargs == null ? '' : ' ' + it.launcher.vmargs} -jar agent.jar -jnlpUrl ${h.inferHudsonURL(request)}${it.url}jenkins-agent.jnlp -secret ${it.jnlpMac} ${it.launcher.getWorkDirOptions(it)}

    ${%Run from agent command line, with the secret stored in a file:}

    echo ${it.jnlpMac} > secret-file
    -java${it.launcher.vmargs == null ? '' : ' ' + it.launcher.vmargs} -jar agent.jar -jnlpUrl ${h.inferHudsonURL(request)}${it.url}slave-agent.jnlp -secret @secret-file ${it.launcher.getWorkDirOptions(it)}
    +java${it.launcher.vmargs == null ? '' : ' ' + it.launcher.vmargs} -jar agent.jar -jnlpUrl ${h.inferHudsonURL(request)}${it.url}jenkins-agent.jnlp -secret @secret-file ${it.launcher.getWorkDirOptions(it)}
    diff --git a/core/src/main/resources/hudson/slaves/SlaveComputer/jenkins-agent.jnlp.jelly b/core/src/main/resources/hudson/slaves/SlaveComputer/jenkins-agent.jnlp.jelly new file mode 100644 index 0000000000..6e4dcc41ff --- /dev/null +++ b/core/src/main/resources/hudson/slaves/SlaveComputer/jenkins-agent.jnlp.jelly @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + Agent for ${it.displayName} + Jenkins project + + + + + + + + + + + + + + + + + + + + + + + + ${it.jnlpMac} + ${it.node.nodeName} + + -webSocket + + + -tunnel + ${launcher.tunnel} + + + -workDir + + + ${it.node.remoteFS} + + + ${launcher.workDirSettings.workDirPath} + + + -internalDir + ${launcher.workDirSettings.internalDir} + + -failIfWorkDirIsMissing + + + + -url + ${rootURL} + + + +