Какие основные секции Jenkinsfile вы знаете
Секции Jenkinsfile — это структурные блоки Declarative Pipeline, каждый из которых отвечает за определенный аспект конфигурации пайплайна. Обязательные секции — pipeline {}, agent и stages {}.
pipeline
Корневой блок, обязательный. Все остальные секции находятся внутри него.
agent
Определяет, где выполняется пайплайн:
Пример
agent any // Любой доступный агент
agent none // Агент указывается на уровне stage
agent { label 'linux' } // Агент с меткой
agent { docker { image 'maven:3.9' } } // Docker-контейнер
stages и stage
stages {} содержит упорядоченный список стадий, а stage('Name') — отдельная стадия с именем:
Пример
stages {
stage('Build') { steps { sh 'mvn compile' } }
stage('Test') { steps { sh 'mvn test' } }
stage('Deploy') { steps { sh './deploy.sh' } }
}
steps
Конкретные шаги внутри стадии — команды, которые нужно выполнить:
Пример
steps {
sh 'mvn clean package' // Выполнение shell-команды
echo 'Hello!' // Вывод сообщения
archiveArtifacts '**/*.jar' // Архивация артефактов
junit '**/surefire-reports/*.xml' // Публикация результатов тестов
}
environment
Переменные окружения, доступные во всем пайплайне или внутри конкретной стадии:
Пример
environment {
APP_VERSION = '1.0.0'
NEXUS_URL = credentials('nexus-url') // Из Jenkins Credentials
}
tools
Инструменты сборки (должны быть предварительно настроены в Jenkins Global Tool Configuration):
Пример
tools {
maven 'Maven-3.9'
jdk 'JDK-17'
}
options
Глобальные параметры пайплайна:
Пример
options {
timeout(time: 30, unit: 'MINUTES') // Максимальное время выполнения
timestamps() // Временные метки в логах
disableConcurrentBuilds() // Запрет параллельных сборок
buildDiscarder(logRotator(numToKeepStr: '10')) // Хранить 10 последних сборок
}
triggers
Триггеры автоматического запуска:
Пример
triggers {
cron('H/15 * * * *') // Каждые 15 минут
pollSCM('H/5 * * * *') // Проверка VCS каждые 5 минут
}
parameters
Входные параметры, задаваемые при запуске сборки:
Пример
parameters {
string(name: 'BRANCH', defaultValue: 'main', description: 'Branch to build')
choice(name: 'ENV', choices: ['dev', 'staging', 'prod'], description: 'Target env')
booleanParam(name: 'SKIP_TESTS', defaultValue: false, description: 'Skip tests')
}
post
Действия после выполнения пайплайна (или стадии):
Пример
post {
always { junit '**/surefire-reports/*.xml' } // Всегда
success { echo 'Build succeeded' } // При успехе
failure { mail to: 'dev@company.com', subject: 'Build failed', body: '...' } // При ошибке
unstable { echo 'Build is unstable' } // При нестабильной сборке
cleanup { cleanWs() } // Очистка рабочей директории
}
when
Условие выполнения стадии (указывается внутри stage):
Пример
stage('Deploy') {
when { branch 'main' }
steps { sh './deploy.sh' }
}
Сводная таблица секций
| Секция | Обязательная | Уровень | Назначение |
|---|---|---|---|
pipeline |
Да | Корень | Корневой блок |
agent |
Да | pipeline / stage | Где выполнять |
stages |
Да | pipeline | Список стадий |
steps |
Да | stage | Команды |
environment |
Нет | pipeline / stage | Переменные |
tools |
Нет | pipeline | Инструменты |
options |
Нет | pipeline / stage | Настройки |
triggers |
Нет | pipeline | Запуск |
parameters |
Нет | pipeline | Входные данные |
post |
Нет | pipeline / stage | Действия после |
when |
Нет | stage | Условия |
Вывод
Знание секций Jenkinsfile позволяет писать чистые и поддерживаемые пайплайны. Обязательные секции — pipeline, agent, stages — формируют каркас, а остальные добавляют гибкость.
На собеседовании: часто просят написать минимальный Jenkinsfile или дополнить существующий. Убедитесь, что знаете разницу между секциями уровня pipeline и stage, особенно
environment,optionsиpost, которые могут использоваться на обоих уровнях.