Как выполнить Groovy замыкание внутри узла в скрипте Jenkins? - PullRequest
0 голосов
/ 26 сентября 2018

Извините, я не смог придумать хорошее название, которое объясняет, что я имею в виду.Так что в настоящее время у нас есть этот плагин сборки, определенный в общей библиотеке:

//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'
    }
}

Проблема в том, чтоДженкинс продолжает просить меня одобрить вызов метода в строке body(), и хотя я утверждаю сценарий, он все еще спрашивает меня, что заставило меня подумать, что, возможно, я не могу вызвать body() внутри node {...}

Кто-нибудь знает возможно ли это?

PS Я не эксперт в отличном коде

...