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)
Exception goes away after downgrading to 1.39