Ответ
Jenkins Pipeline — это набор плагинов, который позволяет описывать процесс непрерывной интеграции и доставки (CI/CD) в виде кода (Pipeline as Code).
Ключевые концепции:
- Declarative vs Scripted: Declarative Pipeline использует упрощенный предопределенный синтаксис, а Scripted — полноценный Groovy-скрипт.
- Узел (Node): Машина, на которой выполняется Pipeline.
- Этап (Stage): Логический раздел конвейера (например,
Build,Test,Deploy). - Шаг (Step): Конкретная операция (например, выполнить команду оболочки).
Пример Declarative Pipeline (Jenkinsfile):
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean compile'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Deploy') {
steps {
sh 'mvn deploy'
}
}
}
}
Преимущества: версионность, возможность код-ревью, возможность ветвления и циклов, возможность паузы и ручного подтверждения.
Ответ 18+ 🔞
Давай я тебе объясню про эти дженкинсовские пайплайны, а то смотрю, у тебя в глазах уже туман от этих "декларативных синтаксисов". Ситуация, блядь, проще, чем кажется.
Представь, что ты — начальник стройки, а твой код — это дом, который надо построить. Ты не будешь же сам, как мудак, таскать кирпичи, мешать бетон и крышу класть? Ты пишешь бумажку-инструкцию: "Шаг 1 — залить фундамент, Шаг 2 — возвести стены, Шаг 3 — накрыть крышей". Вот эта бумажка — и есть Jenkins Pipeline. Ты описываешь процесс (CI/CD) в виде кода, а Дженкинс — тот самый безотказный и туповатый прораб, который всё это выполняет строго по списку. Идиотская, но рабочая схема.
Основные пиздюлины, которые надо усвоить:
- Declarative vs Scripted: Тут два пути. Declarative — это как заполнить готовую анкету в ЖЭКе. Есть строгие графы:
agent,stages,steps. Вписал команды — и поехали. Просто, безопасно, для дебилов. Scripted — это уже полный Groovy-скрипт, где ты можешь творить любую хуйню: циклы, условия, свои функции. Мощно, но можно так въебать, что потом месяц будешь разгребать. - Узел (Node): Обычная рабочая машина, раб на галерах. Тот самый комп, где всё и происходит. Можешь сказать "работай на любой свободной" (
any), а можешь привязать к конкретной тачке, если нужны особые пиздюлины типа видеокарты. - Этап (Stage): Крупный, логический кусок работы. Все эти твои "Собрать", "Протестить", "Задеплоить". В интерфейсе Дженкинса они красиво подсвечиваются, и сразу видно, на каком этапе всё накрылось медным тазом.
- Шаг (Step): Конкретное, элементарное действие. "Выполни команду
mvn clean compile", "Скопируй файл", "Пошли письмо". Кишки процесса.
Смотри, как это выглядит в жизни, на примере простейшего Declarative Pipeline (файл Jenkinsfile):
pipeline { // Объявляем, что это конвейер, а не сценарий для порнофильма
agent any // "Работай на любой свободной рабсиле, мне похуй"
stages { // Начинаются этапы, ёпта
stage('Build') { // Этап "Сборка"
steps { // Шаги внутри этапа
sh 'mvn clean compile' // Команда в шелле: "Мувон, почистись и скомпились!"
}
}
stage('Test') { // Этап "Тесты"
steps {
sh 'mvn test' // "А теперь, мувон, протестируй свою жопу"
}
}
stage('Deploy') { // Этап "Деплой"
steps {
sh 'mvn deploy' // "И выкатывай это всё на прод, будь что будет!"
}
}
}
}
И в чём, собственно, охуенность всего этого? Да в том, что твой процесс сборки теперь не набор тыканий по кнопкам в веб-морде, а код. Его можно хранить в гите вместе с проектом (версионность!), его можно ревьювить, обсуждать и править. В нём можно делать ветвления (if), циклы (for), ставить паузы и ждать, пока какой-нибудь менеджер ручкой подтвердит деплой. В общем, это уже не детский конструктор, а вполне себе инструмент, чтобы автоматизировать всю эту ебучую рутину. Волнение, блядь, пропадает, когда понимаешь, что после пуша в репу всё запустится само и либо соберётся, либо, в случае пиздеца, красиво и наглядно свалится на конкретном этапе, указав тебе пальцем, где именно ты обосрался.