Тут я фиксирую для себя сведения о Jenkins (версии 2 и последующих).
Терминология
- Node (узел) - система (физический сервер, виртуальная машина, контейнер), которая способна выполнять задания Jenkins (в том числе и master). В сценарии конвейера под термином node понимается система с установленным агентом (agent).
- Master - узел, который хранит настройки конвейеров и управляет запуском задач.
- Agent (агент, slave) - программный компонент, работающий на узле, управляемый master'ом и выполняющий задания.
- Worker (исполнитель) - сущность внутри агента, которая непосредственно исполняет задание. У одного агента можент быть несколько исполнителей. Количество исполнителей на узле можно настроить.
- Stage (этап) - набор действий (шагов) конвейера, объединяемых по смыслу (получение исходников, компиляция, тестирование и т.д.).
Синтаксис конвейеров Jenkins
Jenkins 2 поддерживает два варианта синтаксиса описания конвейеров (Jenkinsfile).
Сценарный синтаксис
Грубо говоря - описание конвейера представляет собой скрипт на языке Groovy.
Сценарный синтаксис более функционален, по сравнению с декларативным и позвоялет создавать максимально гибкие конвейеры.
Визуально сценарный конвейер можно определить по конструкциям вида:
node('worker') { stage('Source') { ... ...
Декларативный синтаксис
Декларативный способ описания конвейера заключается в объявлении состояний и ожидаемых результатов.
Декларативный синтаксис напоминает web-интерфейс с заполняемыми формами. Если каких-то необходимых действий не предусмотрено, то их придется дописывать.
Описание конвейера в декларативном стиле начинается так:
pipeline { agent {label:'worker'} stages { stage('Source') { ... ...
Синтаксис описания шагов конвейера Jenkins
В общем случае - действие описывается его названием, а также набором именованных параметров, которые могут быть обязательными и не обязательными. Для обязательных параметров можно не указывать имя параметра.
Варианты синтаксиса шагов конвейера
Полный вариант синтаксиса:
git([branch: 'test', url: 'http://github.com/brentlaster/gradle-greetings.git'])
Допускается запись без скобок:
git branch: 'test', url: https://github.com/brentlaster/gradle-greetings.git
Обязательным является только именованный параметр url, поэтому допускается еще более упрощенная запись:
git 'https://github.com/brentlaster/gradle-greetings.git'
Если именованный параметр не требуется, то параметром по умолчанию является объект сценария:
bat ([script: 'echo hi'])
или
bat 'echo hi'
Discussion