Gymterview
middle

Какие основные секции 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, которые могут использоваться на обоих уровнях.