В Jenkins (или Gradle) используются 2 основные функции:
- Groovy (java) идиоматические c структуры, такие как циклы, переключатели, цепочка команд и т. Д. c
- DSLBuilder, основанный на
Closure
s, чтобы разрешить вложение и вызов методов c, специфичных для домена, поскольку они были частью самого Groovy.
Итак, если вы пишете что-то вроде
stage('Stage 1') {
steps {
// One or more steps
}
}
, это переводится внутри примерно на:
jenkinsContext.stage('Stage 1') {
jenkinsContext.steps {
// One or more steps
}
}
, поэтому писать и читать намного проще. Здесь Замыкания - блоки {...}
- представляют вложенность или группировку вашего кода.
В этом блоке вы также можете увидеть способ вызова методов Groovy, в котором последний аргумент - Замыкание. Приведенный выше код можно переписать как:
jenkinsContext.stage 'Stage 1', { // here no brackets around args
jenkinsContext.steps( { // here with normal java-style brackets
// One or more steps
} )
}
В jenkins вы можете смешивать и сопоставлять вызовы DSL со структурами Groovy:
[ 'Stage 1', 'Stage 2' ].each{
stage( it ) {}
}
или даже динамически генерировать имена DSL:
[ 'Stage 1':'stage', 'step 2':'steps' ].each{ value, name ->
"$name"( value ) {}
}
создаст DSL (ТОЛЬКО в качестве примера!):
stage( 'Stage 1') {}
steps( 'Step 2' ) {}
Итак, синтаксис конвейера Jenkins: Groovy + Jenkins DSL