如何在Jenkins脚本化管道中的节点内部执行Groovy闭包?

时间:2018-09-26 02:10:55

标签: jenkins jenkins-pipeline jenkins-groovy

对不起,我无法提出一个很好的标题来解释我的意思。所以目前我们在共享库中定义了这个构建插件:

//myBuildPlugin.groovy
def call(body) {

    def pipelineParams = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = pipelineParams
    node('some-label') {
       body()
    }
}

现在我最终希望能够添加自己的步骤,例如:

//Jenkinsfile
myBuildPlugin {
    doBuild { 
        mavenToolId = 'my_maven3'
        deployMavenArtifact = true
    }
    doUnitTests {
        publishResult = false
    }

    doDocker {
       dockerRegistry = 'http://xyz'
    }
    // other components
}

因此,每个项目都需要包括所需的阶段,例如另一个项目可能只需要这样做:

myBuildPlugin {
    doBuild { 
        mavenToolId = 'my_maven3'
        deployMavenArtifact = true
    }
}
例如,

doBuild是另一个常规类:

//doBuild.groovy
def call(body) {
    def pipelineParams = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = pipelineParams
    body()
    stage('Maven Build') {
       sh 'mvn clean verify'
    }
}

问题是Jenkins一直要求我在行body()上批准方法调用,即使我批准了脚本,它仍然问我是什么使我觉得也许我不能调用{{1 }} body()

有人知道这是否可能吗?

P.S。我不是Groovy代码专家

0 个答案:

没有答案