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

Could not find matching constructor for: hudson.plugins.ec2.AmazonEC2Cloud(java.lang.String, java.lang.Boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.util.ArrayList)

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major Major
    • ec2-plugin
    • None

      Seeing the attached in logs, looks new in 1.41, not seeing it in 1.39
      ```
      groovy.lang.GroovyRuntimeException: Could not find matching constructor for: hudson.plugins.ec2.AmazonEC2Cloud(java.lang.String, java.lang.Boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.util.ArrayList)
      at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1732)
      at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1532)
      at org.codehaus.groovy.runtime.callsite.MetaClassConstructorSite.callConstructor(MetaClassConstructorSite.java:49)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235)
      at init-ec2.run(init-ec2.groovy:112)
      at groovy.lang.GroovyShell.evaluate(GroovyShell.java:585)
      at jenkins.util.groovy.GroovyHookScript.execute(GroovyHookScript.java:136)
      at jenkins.util.groovy.GroovyHookScript.execute(GroovyHookScript.java:127)
      at jenkins.util.groovy.GroovyHookScript.run(GroovyHookScript.java:110)
      at hudson.init.impl.GroovyInitScript.init(GroovyInitScript.java:41)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:104)
      at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:175)
      at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296)
      at jenkins.model.Jenkins$5.runTask(Jenkins.java:1083)
      at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)
      at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      at java.lang.Thread.run(Thread.java:748)
      ```

      The initialization script did not change:
      def ec2_cloud = new AmazonEC2Cloud(
      // String cloudName
      cloud_name,
      // boolean useInstanceProfileForCredentials
      true,
      // String credentialsId
      '',
      // String region
      region,
      // String privateKey
      private_key,
      // String instanceCapStr
      instance_cap,
      // List<SlaveTemplate> templates
      [slave_template]
      )

      Not sure why it worked before?

          [JENKINS-55454] Could not find matching constructor for: hudson.plugins.ec2.AmazonEC2Cloud(java.lang.String, java.lang.Boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.util.ArrayList)

          Exception goes away after downgrading to 1.39

          Michal Matyjek added a comment - Exception goes away after downgrading to 1.39

          If you are using the groovy script to configure the plugin you need to modify your script to add the additional parameters.

          -def amiType = new UnixData('', '', '22')
          +def amiType = new UnixData('', '', '', '22')
          -        workerAmis
          +        workerAmis,
          +        '',
          +        ''
          ) 

          Oliver Pereira added a comment - If you are using the groovy script to configure the plugin you need to modify your script to add the additional parameters. -def amiType = new UnixData( '', ' ', ' 22') +def amiType = new UnixData( '', ' ', ' ', ' 22') - workerAmis + workerAmis, + '', + '' )

          Oliver is correct the interface has been changed in the 1.41

          FABRIZIO MANFREDI added a comment - Oliver is correct the interface has been changed in the 1.41

          This seems to be the change?
          https://github.com/jenkinsci/ec2-plugin/commit/1e0a49d145c7499514c934c57b72a7f5b5762546
          the constructor now needs roleArn / roleSessionName ?

          I am not sure about the amiType - not using this I guess?

          Michal Matyjek added a comment - This seems to be the change? https://github.com/jenkinsci/ec2-plugin/commit/1e0a49d145c7499514c934c57b72a7f5b5762546 the constructor now needs roleArn / roleSessionName ? I am not sure about the amiType - not using this I guess?

          Amit Nigam added a comment - - edited

          I am getting same issue. it is working if I keep instance type as null. 

          I want to provide InstanceType.fromValue('t2.medium or any valid type') as a parameter to SlaveTemplate.

          --------------------------------------------------------------------------------------------------

          #!groovy

          // imports
          import com.amazonaws.services.ec2.model.InstanceType
          import com.cloudbees.jenkins.plugins.awscredentials.AWSCredentialsImpl
          import com.cloudbees.plugins.credentials.*
          import com.cloudbees.plugins.credentials.domains.Domain
          import hudson.model.*
          import hudson.plugins.ec2.AmazonEC2Cloud
          import hudson.plugins.ec2.AMITypeData
          import hudson.plugins.ec2.EC2Tag
          import hudson.plugins.ec2.SlaveTemplate
          import hudson.plugins.ec2.SpotConfiguration
          import hudson.plugins.ec2.UnixData
          import jenkins.model.Jenkins

          // parameters
          def SlaveTemplateAPSouth1Parameters = [
            ami: 'ami-0xxxxxxxxxxxx',
            zone: 'ap-south-1',
            spotConfiguration: new SpotConfiguration (false),
            associatePublicIp: false,
            connectBySSHProcess: true,
            connectUsingPublicIp: false,
            customDeviceMapping: '',
            deleteRootOnTermination: true,
            description: 'Jenkins slave EC2 AP South 1',
            ebsOptimized: false,
            iamInstanceProfile: '',
            idleTerminationMinutes: '5',
            initScript: '',
            instanceCapStr: '50',
            jvmopts: '',
            labelString: 'aws.ec2.ap.south.jenkins.slave',
            launchTimeoutStr: '',
            numExecutors: '1',
            remoteAdmin: 'ubuntu',
            remoteFS: '/home/ubuntu',
            securityGroups: 'jenkins-slave-sg',
            stopOnTerminate: false,
            subnetId: 'subnet-xxxxxxxxxxx',
            tags: new EC2Tag('Name', 'jenkins-slave'),
            tmpDir: '',
            type: 't2.medium',
            useDedicatedTenancy: false,
            useEphemeralDevices: true,
            usePrivateDnsName: true,
            userData: ''
          ]

          def AmazonEC2CloudParameters = [
            cloudName:      'EC2 Cloud',
            credentialsId:  'EC2Cred',
            instanceCapStr: '50',
            privateKey:     '''----BEGIN RSA PRIVATE KEY----

          ----END RSA PRIVATE KEY----''',
            region: 'ap-south-1',
            privateKey1: 'JenkinsSlave',
            useInstanceProfileForCredentials: false
          ]

          def AWSCredentialsImplParameters = [
            id:           'EC2Cred',
            description:  'Jenkins AWS IAM key',
            accessKey:    '',
            secretKey:    ''
          ]

          AWSCredentialsImpl aWSCredentialsImpl = new AWSCredentialsImpl(
            CredentialsScope.GLOBAL,
            AWSCredentialsImplParameters.id,
            AWSCredentialsImplParameters.accessKey,
            AWSCredentialsImplParameters.secretKey,
            AWSCredentialsImplParameters.description
          )

          SlaveTemplate SlaveTemplateAPSouth1 = new SlaveTemplate(
            SlaveTemplateAPSouth1Parameters.ami,
            SlaveTemplateAPSouth1Parameters.zone,
            null,
            SlaveTemplateAPSouth1Parameters.securityGroups,
            SlaveTemplateAPSouth1Parameters.remoteFS,
            InstanceType.fromValue(SlaveTemplateAPSouth1Parameters.type),
            SlaveTemplateAPSouth1Parameters.ebsOptimized,
            SlaveTemplateAPSouth1Parameters.labelString,
            Node.Mode.NORMAL,
            SlaveTemplateAPSouth1Parameters.description,
            SlaveTemplateAPSouth1Parameters.initScript,
            SlaveTemplateAPSouth1Parameters.tmpDir,
            SlaveTemplateAPSouth1Parameters.userData,
            SlaveTemplateAPSouth1Parameters.numExecutors,
            SlaveTemplateAPSouth1Parameters.remoteAdmin,
            new UnixData(null, null, null,'22',null),
            SlaveTemplateAPSouth1Parameters.jvmopts,
            SlaveTemplateAPSouth1Parameters.stopOnTerminate,
            SlaveTemplateAPSouth1Parameters.subnetId,
            [SlaveTemplateAPSouth1Parameters.tags],
            SlaveTemplateAPSouth1Parameters.idleTerminationMinutes,
            SlaveTemplateAPSouth1Parameters.usePrivateDnsName,
            SlaveTemplateAPSouth1Parameters.instanceCapStr,
            SlaveTemplateAPSouth1Parameters.iamInstanceProfile,
            SlaveTemplateAPSouth1Parameters.deleteRootOnTermination,
            SlaveTemplateAPSouth1Parameters.useEphemeralDevices,
            SlaveTemplateAPSouth1Parameters.useDedicatedTenancy,
            SlaveTemplateAPSouth1Parameters.launchTimeoutStr,
            SlaveTemplateAPSouth1Parameters.associatePublicIp,
            SlaveTemplateAPSouth1Parameters.customDeviceMapping,
            SlaveTemplateAPSouth1Parameters.connectBySSHProcess,
            SlaveTemplateAPSouth1Parameters.connectUsingPublicIp
          )

          AmazonEC2Cloud amazonEC2Cloud = new AmazonEC2Cloud(
            AmazonEC2CloudParameters.cloudName,
            AmazonEC2CloudParameters.useInstanceProfileForCredentials,
            AmazonEC2CloudParameters.credentialsId,
            AmazonEC2CloudParameters.region,
            AmazonEC2CloudParameters.privateKey,
            AmazonEC2CloudParameters.privateKey1,
            AmazonEC2CloudParameters.instanceCapStr,
            [SlaveTemplateAPSouth1],
            '',
            ''
          )

          // get Jenkins instance
          Jenkins jenkins = Jenkins.getInstance()

          // get credentials domain
          //def domain = Domain.global()
          // get credentials store
          //def store = jenkins.getExtensionList('com.cloudbees.plugins.credentials.SystemCredentialsProvider')[0].getStore()
          // add credential to store
          //store.addCredentials(domain, aWSCredentialsImpl)

          // add cloud configuration to Jenkins
          jenkins.clouds.add(amazonEC2Cloud)

          // save current Jenkins state to disk
          jenkins.save()

          ----------------------------------------------------------------------------------------------

          Error:

          groovy.lang.GroovyRuntimeException: Could not find matching constructor for: hudson.plugins.ec2.SlaveTemplate(java.lang.String, java.lang.String, null, java.lang.String, java.lang.String, com.amazonaws.services.ec2.model.InstanceType, java.lang.Boolean, java.lang.String, hudson.model.Node$Mode, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, hudson.plugins.ec2.UnixData, java.lang.String, java.lang.Boolean, java.lang.String, java.util.ArrayList, java.lang.String, java.lang.Boolean, java.lang.String, java.lang.String, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, java.lang.String, java.lang.Boolean, java.lang.String, java.lang.Boolean, java.lang.Boolean)

           

           

          Amit Nigam added a comment - - edited I am getting same issue. it is working if I keep instance type as null.  I want to provide InstanceType.fromValue('t2.medium or any valid type') as a parameter to SlaveTemplate. -------------------------------------------------------------------------------------------------- #!groovy // imports import com.amazonaws.services.ec2.model.InstanceType import com.cloudbees.jenkins.plugins.awscredentials.AWSCredentialsImpl import com.cloudbees.plugins.credentials.* import com.cloudbees.plugins.credentials.domains.Domain import hudson.model.* import hudson.plugins.ec2.AmazonEC2Cloud import hudson.plugins.ec2.AMITypeData import hudson.plugins.ec2.EC2Tag import hudson.plugins.ec2.SlaveTemplate import hudson.plugins.ec2.SpotConfiguration import hudson.plugins.ec2.UnixData import jenkins.model.Jenkins // parameters def SlaveTemplateAPSouth1Parameters = [   ami: 'ami-0xxxxxxxxxxxx',   zone: 'ap-south-1',   spotConfiguration: new SpotConfiguration (false),   associatePublicIp: false,   connectBySSHProcess: true,   connectUsingPublicIp: false,   customDeviceMapping: '',   deleteRootOnTermination: true,   description: 'Jenkins slave EC2 AP South 1',   ebsOptimized: false,   iamInstanceProfile: '',   idleTerminationMinutes: '5',   initScript: '',   instanceCapStr: '50',   jvmopts: '',   labelString: 'aws.ec2.ap.south.jenkins.slave',   launchTimeoutStr: '',   numExecutors: '1',   remoteAdmin: 'ubuntu',   remoteFS: '/home/ubuntu',   securityGroups: 'jenkins-slave-sg',   stopOnTerminate: false,   subnetId: 'subnet-xxxxxxxxxxx',   tags: new EC2Tag('Name', 'jenkins-slave'),   tmpDir: '',   type: 't2.medium',   useDedicatedTenancy: false,   useEphemeralDevices: true,   usePrivateDnsName: true,   userData: '' ] def AmazonEC2CloudParameters = [   cloudName:      'EC2 Cloud',   credentialsId:  'EC2Cred',   instanceCapStr: '50',   privateKey:     '''---- BEGIN RSA PRIVATE KEY ---- ---- END RSA PRIVATE KEY ----''',   region: 'ap-south-1',   privateKey1: 'JenkinsSlave',   useInstanceProfileForCredentials: false ] def AWSCredentialsImplParameters = [   id:           'EC2Cred',   description:  'Jenkins AWS IAM key',   accessKey:    '',   secretKey:    '' ] AWSCredentialsImpl aWSCredentialsImpl = new AWSCredentialsImpl(   CredentialsScope.GLOBAL,   AWSCredentialsImplParameters.id,   AWSCredentialsImplParameters.accessKey,   AWSCredentialsImplParameters.secretKey,   AWSCredentialsImplParameters.description ) SlaveTemplate SlaveTemplateAPSouth1 = new SlaveTemplate(   SlaveTemplateAPSouth1Parameters.ami,   SlaveTemplateAPSouth1Parameters.zone,   null,   SlaveTemplateAPSouth1Parameters.securityGroups,   SlaveTemplateAPSouth1Parameters.remoteFS,   InstanceType.fromValue(SlaveTemplateAPSouth1Parameters.type),   SlaveTemplateAPSouth1Parameters.ebsOptimized,   SlaveTemplateAPSouth1Parameters.labelString,   Node.Mode.NORMAL,   SlaveTemplateAPSouth1Parameters.description,   SlaveTemplateAPSouth1Parameters.initScript,   SlaveTemplateAPSouth1Parameters.tmpDir,   SlaveTemplateAPSouth1Parameters.userData,   SlaveTemplateAPSouth1Parameters.numExecutors,   SlaveTemplateAPSouth1Parameters.remoteAdmin,   new UnixData(null, null, null,'22',null),   SlaveTemplateAPSouth1Parameters.jvmopts,   SlaveTemplateAPSouth1Parameters.stopOnTerminate,   SlaveTemplateAPSouth1Parameters.subnetId,   [SlaveTemplateAPSouth1Parameters.tags] ,   SlaveTemplateAPSouth1Parameters.idleTerminationMinutes,   SlaveTemplateAPSouth1Parameters.usePrivateDnsName,   SlaveTemplateAPSouth1Parameters.instanceCapStr,   SlaveTemplateAPSouth1Parameters.iamInstanceProfile,   SlaveTemplateAPSouth1Parameters.deleteRootOnTermination,   SlaveTemplateAPSouth1Parameters.useEphemeralDevices,   SlaveTemplateAPSouth1Parameters.useDedicatedTenancy,   SlaveTemplateAPSouth1Parameters.launchTimeoutStr,   SlaveTemplateAPSouth1Parameters.associatePublicIp,   SlaveTemplateAPSouth1Parameters.customDeviceMapping,   SlaveTemplateAPSouth1Parameters.connectBySSHProcess,   SlaveTemplateAPSouth1Parameters.connectUsingPublicIp ) AmazonEC2Cloud amazonEC2Cloud = new AmazonEC2Cloud(   AmazonEC2CloudParameters.cloudName,   AmazonEC2CloudParameters.useInstanceProfileForCredentials,   AmazonEC2CloudParameters.credentialsId,   AmazonEC2CloudParameters.region,   AmazonEC2CloudParameters.privateKey,   AmazonEC2CloudParameters.privateKey1,   AmazonEC2CloudParameters.instanceCapStr,   [SlaveTemplateAPSouth1] ,   '',   '' ) // get Jenkins instance Jenkins jenkins = Jenkins.getInstance() // get credentials domain //def domain = Domain.global() // get credentials store //def store = jenkins.getExtensionList('com.cloudbees.plugins.credentials.SystemCredentialsProvider') [0] .getStore() // add credential to store //store.addCredentials(domain, aWSCredentialsImpl) // add cloud configuration to Jenkins jenkins.clouds.add(amazonEC2Cloud) // save current Jenkins state to disk jenkins.save() ---------------------------------------------------------------------------------------------- Error: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: hudson.plugins.ec2.SlaveTemplate(java.lang.String, java.lang.String, null, java.lang.String, java.lang.String, com.amazonaws.services.ec2.model.InstanceType, java.lang.Boolean, java.lang.String, hudson.model.Node$Mode, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, hudson.plugins.ec2.UnixData, java.lang.String, java.lang.Boolean, java.lang.String, java.util.ArrayList, java.lang.String, java.lang.Boolean, java.lang.String, java.lang.String, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, java.lang.String, java.lang.Boolean, java.lang.String, java.lang.Boolean, java.lang.Boolean)    

            thoulen FABRIZIO MANFREDI
            mkj Michal Matyjek
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated: