Как выглядит конвейер (pipeline) в Jenkins?

«Как выглядит конвейер (pipeline) в Jenkins?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Конвейер в Jenkins описывается в файле Jenkinsfile и определяет этапы сборки, тестирования и развертывания. Основные стили — Declarative (декларативный) и Scripted (скриптовый).

Пример Declarative Pipeline для Java-приложения:

pipeline {
    agent any // Запуск на любом доступном агенте
    options {
        timeout(time: 1, unit: 'HOURS') // Таймаут на выполнение
    }
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package -DskipTests' // Сборка артефакта
                archiveArtifacts artifacts: 'target/*.jar', fingerprint: true // Сохранение артефакта
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test' // Запуск unit-тестов
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml' // Публикация отчетов о тестах
                }
            }
        }
        stage('Deploy to Staging') {
            when {
                branch 'main' // Этап только для ветки main
            }
            steps {
                sh 'kubectl apply -f k8s/staging-deployment.yaml' // Развертывание в staging-кластер Kubernetes
            }
        }
    }
    post {
        failure {
            emailext (
                subject: 'Сборка ${env.JOB_NAME} - ${env.BUILD_NUMBER} провалилась',
                body: 'Проверьте консольный вывод: ${env.BUILD_URL}',
                to: 'team@example.com'
            ) // Уведомление при неудаче
        }
    }
}

Ключевые элементы:

  • agent: Определяет, где выполняется конвейер (Docker, Kubernetes, конкретная нода).
  • stages и stage: Логические блоки, разделяющие процесс.
  • steps: Конкретные команды внутри этапа.
  • post: Блок для действий после завершения этапа или всего конвейера (уведомления, очистка).
  • when: Условное выполнение этапа (по ветке, тегу, изменению в определенной директории).