Jenkins can't find defined function?

Viewed 632

I wrote this to test the idea I saw on JENKINS-44085

def generateStage(String job, String targetVersion,
                  String rootVersion, Integer sleepTime=0) {
    return {
        stage("Deploying: ${job}") {
            sleep sleepTime
            println "Job: $job"
        }
    }
}

def deployProcs(targetVersion, rootVersion) {
    script {
        int sleepTime = 0
        def procs = ["proc-proc", "proc-proc-high"]
        def parallelStagesMap = procs.collectEntries {
            ["${it}" : generateStage(it, targetVersion, rootVersion, sleepTime)]
            sleepTime += 5
        }
        timestamps {
            parallel parallelStagesMap
        }
    }
}

node('linux') {
  deployProcs(10, 10)
}

But I get

java.lang.NoSuchMethodError: No such DSL method 'generateStage' found among steps.

What am I missing?

1 Answers

You are calling deployProcs(10, 10) where both parameters are type of Integer. The same integer parameters are used when calling generateStage, which parameters are typed String targetVersion and String rootVersion.

A fix is to either, call deployProcs('10', '10') or change def generateStage(String job, Integer targetVersion, Integer rootVersion, Integer sleepTime=0), or remove types from generateStage function parameters.

Related