Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-47586

ssh-slaves plugin tries to install latest JDK from Oracle's website and must be updated for every new JDK release

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Minor Minor
    • ssh-slaves-plugin
    • None
    • ssh-slaves-1.27

      ssh-slaves downloads a specified JDK from Oracle if the agent doesn't have the JDK already installed.

      Only the most recent version of JDK 8 and 9 are available from Oracle without an Oracle account, so unless an Oracle username and password have been added to Jenkins this attempted installation will fail whenever a new JDK is released, and the version in ssh-slaves would need to be updated.

      Cloned Description:

      Oracle recently deployed a new version of its web site and it breaks the JDKInstaller.

      On MacOS :

      Installing JDK jdk-8u92-oth-JPR
      Downloading JDK from http://download.oracle.com/otn/java/jdk/8u92-b14/jdk-8u92-macosx-x64.dmg
      ERROR: Build step failed with exception
      java.lang.IllegalStateException: Unable to find a form in the response:
      
      
      
      
      
      
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
      
      
      
      
      
      
      
      
      
      
      <html  lang="en">
      
      <head>
        
      <title>Sign On</title>
      <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
      <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=1;" />
      
      
      
      
      
      
      
      
      
      <link rel="stylesheet" type="text/css" href="/oaam_server/css/oaam_uio.css">
      
      
      
        <link rel="stylesheet" type="text/css" href="/oaam_server/client/oam/css/e_oaam_style.css">
      
      
      
      
      
      <script type="text/javascript" charset="UTF-8" language="javascript" src="/oaam_server/js/oaam_uio.js"></script>
      
      
      
      <style id="acj">body{ display:none !important;}</style> 
      <script type="text/javascript" charset="UTF-8">
      if (self === top) { 
      var acj = document.getElementById("acj"); 
      acj.parentNode.removeChild(acj); 
      } else { 
      top.location = self.location; 
      } 
      </script>
      
      
      <script type="text/javascript" charset="UTF-8">
      	loginIdRegExpr = /[^\s\\\<\>]/gi;
      	var app_messages = {
      							validateInvalidChars: "{0} has invalid characters.",
      							validateMinMaxLength: "Your answer should be {0}-{1} characters.",
      							validateDuplicateQuestion: "You can\u0027t select the same question again.",
      							validateEmptyAnswers: "Please enter the answer for question number(s)",
      							validateEmptyAnswer: "Please enter your answer.",
      							validateSelectQuestions: "Please select your questions.",
      							validatePasswordFormat: "Invalid password format.",
      							validatePasswordComplete: "Completed",
      							validatePasswordNotEntered: "Not entered.",
      							validateChallenge: "Please enter the answer."
      						};
      </script>
      
      
        <!-- 11.1.2.3.0.OAAM_11.1.2.3.0_GENERIC_RELEASE : N/A : oam -->
      </head>
      
      
      
      <body class="f17 f17v2">
        
      
      
      
      
      
      <style type="text/css">
      	.bharosaPage{
      		width:auto !important;
      	}
      </style>
      
      <script type="text/javascript" src="/oaam_server/client/oam/js/oaam_check.js?v=2.0"></script>
      <script type="text/javascript">
        if (top != self){
          if (top.location.replace){
            top.location.replace(self.location.href);
          } else {
            top.location.href = self.location.href;
          }
        }
      </script>
      <script>stripHTML();</script>
      
      <div class="f17w1">
      <div class="f17w2" style="display:none"><img src="/oaam_server/client/oam/images/sso-f17v2-bgimg.jpg"></div>
      
      <!-- U16v0 -->
      <div id="u16" class="u16 u16v0">
      	<div class="u16w1">
      		<a href="https://www.oracle.com/index.html">Oracle</a>
      	</div>
      </div>
      <!-- /U16v0 -->
      
      <!-- CB41v0 -->
      
      
            
            
              
      
      
      
      
      
      
      
      
      
      
      
      
      <div class="bharosaPageTitle">
          
      </div>
      <div class="bharosaPageMessage">
          
      </div>
      
      	  
      
          
              <div class="loginError" id="errorMessage" title="Your session has expired. &#160;&#160;Please try again.">
              <img src="/oaam_server/images/red_square.gif" height="7" width="7" align="top" valign="top" border="0" alt="Error">
            Your session has expired. &#160;&#160;Please try again.
              </div>
          
      
      <div class="loginFailLinks">
        
      </div>
      
            
            
      
        
      
      
      
      <script type="text/javascript" src="/oaam_server/client/oam/js/jquery.js?v=1.0"></script>
      <script type="text/javascript" src="/oaam_server/client/oam/js/sso.js?v=1.0"></script>
      </div>
      
      </body>
      
      </html>
      
      	at hudson.tools.JDKInstaller.locate(JDKInstaller.java:484)
      	at hudson.tools.JDKInstaller.performInstallation(JDKInstaller.java:139)
      	at hudson.tools.InstallerTranslator.getToolHome(InstallerTranslator.java:72)
      	at hudson.tools.ToolLocationNodeProperty.getToolHome(ToolLocationNodeProperty.java:109)
      	at hudson.tools.ToolInstallation.translateFor(ToolInstallation.java:206)
      	at hudson.model.JDK.forNode(JDK.java:144)
      	at hudson.model.AbstractProject.getEnvironment(AbstractProject.java:341)
      	at hudson.model.Run.getEnvironment(Run.java:2283)
      	at hudson.model.AbstractBuild.getEnvironment(AbstractBuild.java:878)
      	at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:102)
      	at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:66)
      	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
      	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:736)
      	at hudson.model.Build$BuildExecution.build(Build.java:206)
      	at hudson.model.Build$BuildExecution.doRun(Build.java:163)
      	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:496)
      	at hudson.model.Run.execute(Run.java:1737)
      	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
      	at hudson.model.ResourceController.execute(ResourceController.java:97)
      	at hudson.model.Executor.run(Executor.java:421)

      On Linux :

      14:15:21 Installing JDK jdk-8u121-oth-JPR
      14:15:21 Downloading JDK from http://download.oracle.com/otn/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.tar.gz
      14:15:29 java.io.IOException: Unable to find the login form
      14:15:29 	at hudson.tools.JDKInstaller.locate(JDKInstaller.java:464)
      14:15:29 	at hudson.tools.JDKInstaller.performInstallation(JDKInstaller.java:139)
      14:15:29 	at hudson.tools.InstallerTranslator.getToolHome(InstallerTranslator.java:72)
      14:15:29 	at hudson.tools.ToolLocationNodeProperty.getToolHome(ToolLocationNodeProperty.java:109)
      14:15:29 	at hudson.tools.ToolInstallation.translateFor(ToolInstallation.java:206)
      14:15:29 	at hudson.model.JDK.forNode(JDK.java:144)
      14:15:29 	at hudson.model.AbstractProject.getEnvironment(AbstractProject.java:341)
      14:15:29 	at hudson.model.Run.getEnvironment(Run.java:2283)
      14:15:29 	at hudson.model.AbstractBuild.getEnvironment(AbstractBuild.java:888)
      14:15:29 	at hudson.maven.AbstractMavenBuild.getEnvironment(AbstractMavenBuild.java:56)
      14:15:29 	at hudson.maven.MavenModuleSetBuild.getEnvironment(MavenModuleSetBuild.java:167)
      14:15:29 	at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1103)
      14:15:29 	at hudson.scm.SCM.checkout(SCM.java:495)
      14:15:29 	at hudson.model.AbstractProject.checkout(AbstractProject.java:1212)
      14:15:29 	at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:576)
      14:15:29 	at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
      14:15:29 	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:501)
      14:15:29 	at hudson.model.Run.execute(Run.java:1737)
      14:15:29 	at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:542)
      14:15:29 	at hudson.model.ResourceController.execute(ResourceController.java:97)
      14:15:29 	at hudson.model.Executor.run(Executor.java:421)

      Latest binaries (thus not archived and not protected are still ok) 

          [JENKINS-47586] ssh-slaves plugin tries to install latest JDK from Oracle's website and must be updated for every new JDK release

          Devin Nusbaum added a comment -

          Devin Nusbaum added a comment - CC oleg_nenashev aheritier

          Oleg Nenashev added a comment -

          dnusbaum Somebody should just copy-paste the core's implementation, right?

          Oleg Nenashev added a comment - dnusbaum Somebody should just copy-paste the core's implementation, right?

          Devin Nusbaum added a comment - - edited

          oleg_nenashev You mean duplicate JDKToolInstaller and its config? I'd prefer one of the following, (roughly in order of preference):

          1. Remove the JDK auto-install feature, and document that Java must be installed on agents before they can be used.
          2. Add configuration to specify a JDK tool name, and then install that JDK instead of hardcoding one in the plugin. This way admins would have control over the installed version and could change it as needed.
          3. Add a new feature to JDKToolInstaller to install the 'latest' JDK. Would likely be broken immediately after a JDK release until the crawler runs and update center data is refreshed.

          Devin Nusbaum added a comment - - edited oleg_nenashev You mean duplicate JDKToolInstaller and its config? I'd prefer one of the following, (roughly in order of preference): Remove the JDK auto-install feature, and document that Java must be installed on agents before they can be used. Add configuration to specify a JDK tool name, and then install that JDK instead of hardcoding one in the plugin. This way admins would have control over the installed version and could change it as needed. Add a new feature to JDKToolInstaller to install the 'latest' JDK. Would likely be broken immediately after a JDK release until the crawler runs and update center data is refreshed.

          dnusbaum I made the option 1, and try to make the option 2 too, the option 2 it is not possible because the agent is offline, there is no channel open, so the installer does not work.

          Ivan Fernandez Calvo added a comment - dnusbaum I made the option 1, and try to make the option 2 too, the option 2 it is not possible because the agent is offline, there is no channel open, so the installer does not work.

            ifernandezcalvo Ivan Fernandez Calvo
            dnusbaum Devin Nusbaum
            Votes:
            3 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              Resolved: