У меня есть общая библиотека, содержащая декларативный конвейер, используемый в репозитории 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, но мне нравится «безопасность» декларативного (и, похоже, на это гораздо больше ресурсов, чем на сценарий).
Вы видите, что меня сбивает с толку?