首页 > 解决方案 > 如何在 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,例如,是另一个 groovy 类:

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

问题是詹金斯一直要求我在线批准方法调用body(),即使我批准了脚本,它仍然问我这让我觉得也许我不能body()在里面打电话node {...}

有谁知道这是否可能?

PS 我不是 groovy 代码方面的专家

标签: jenkinsjenkins-pipelinejenkins-groovy

解决方案


推荐阅读