Chris F
Chris F

Reputation: 16673

Jenkins can't find defined function?

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?

Upvotes: 3

Views: 1467

Answers (1)

Travenin
Travenin

Reputation: 1590

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.

Upvotes: 2

Related Questions