如何从节点块脚本管道调用函数

how to call a function from node block scripted pipeline

我试图理解下面这行为什么我们需要用 .call()

调用一个阶段

buildStage(slurper).call() 有人能解释一下这行是什么意思为什么我们不能用 buildStage(吸食者)

def call(String jsonString) {
  node("unix") {
  try {
        def slurper = new JsonSlurperClassic().parseText(jsonString)        
        buildStage(slurper).call() 
        deployStage()

        }catch(error) {
            println ex.toString()
        }finally{
            sendEmail() 
        }
    }
}     

def buildStage(slurper){
   stage ('Build') {

    }
}

def deployStage(slurper){
   stage ('Deploy') {

    }
}

从上面的示例中可以看出 buildStage(slurper).call() 不是必需的,因为它可以像 buildStage(slurper) 一样调用, 如果方法有一个需要在调用时执行的闭包块,则需要 methondName.call() ,请参阅下面的示例

myPipeline.groovy

import groovy.json.JsonSlurperClassic

def call(String jsonString) {
    node() {
        try {
            def slurper = new JsonSlurperClassic().parseText(jsonString)
            buildStage(slurper)
            println deployStage(slurper).call()

        }catch(Exception ex ) {
            throw ex;
        }finally{
            // do nothing
        }
    }
}

def buildStage(slurper){
    stage ('Build') {
         return {
            println slurper
            def r = 5 + 5
            println r
        }.call()

    }
}

def deployStage(slurper){
    stage ('Deploy') {
        return {
            return "The name is "+ slurper.name
        }

    }
}

詹金斯文件

def myJSON = '''
    { "name" : "XYZ"}
'''
myPipeline(myJSON)