Почему этот декларативный конвейер не работает в моей общей библиотеке? - PullRequest
1 голос
/ 17 апреля 2019

У меня есть общая библиотека, содержащая декларативный конвейер, используемый в репозитории Jenkinsfile (фактически он вызывается через промежуточный файл): Jenkinsfile -> bupJavadocApiPipeline.groovy -> bupMavenPipeline.groovy

Jenkinsfile (совместно используемая библиотека неявна):

bupJavadocApiPipeline {}

bupJavadocApiPipeline.groovy:

def call(body, Map defaults = [:]) {
    if (defaults.mavenGoals == null) defaults.mavenGoals = 'javadoc:javadoc package'
    bupMavenPipeline(body,defaults)
}

bupMavenPipeline.groovy (bupParameters выполняет трюк DELEGATE_FIRST):

def call(body, defaults = [:]) {

if (defaults.maven == null) defaults.maven='MVN3'
if (defaults.mavenGoals == null) defaults.mavenGoals='package'
if (defaults.jdk == null) defaults.jdk='JDK8'
if (defaults.buildsToKeep == null) defaults.buildsToKeep='10'

def parameters = bupParameters(body,defaults)

pipeline {
    options {
        timestamps()
        buildDiscarder(logRotator(numToKeepStr: "${parameters.buildsToKeep}"))
    }
    agent ('docker') {
    tools {
        maven "${parameters.maven}"
        jdk "${parameters.maven}"
    }
    stages {    
        stage ('Build') {
            steps {
                sh "mvn -Dmaven.test.failure.ignore=true clean ${parameters.mavenGoals}"
            }
            post {
                success {
                    junit '**/target/surefire-report/**/*.xml'                  
                }
            }
        }
    }
    }
}

}       

Это не с:

[Pipeline] Start of Pipeline
[Pipeline] End of Pipeline
java.lang.NoSuchMethodError: No such DSL method 'options' found among steps [...

Версии - Jenkins 2.162 и Pipeline 2.6, но многие веб-ресурсы говорят, что это поддерживается с сентября 2017 года! Я могу заставить все это работать, если я только выполняю сценарий конвейера в bupMavenPipeline.groovy, но мне нравится «безопасность» декларативного (и, похоже, на это гораздо больше ресурсов, чем на сценарий).

Вы видите, что меня сбивает с толку?

1 Ответ

0 голосов
/ 14 мая 2019

Включив фактический файл Jenkinsfile, Дженкинс любезно помог мне определить проблему:

агент ('докер') {...}

должен быть

агент{label 'docker'}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...