Какой синтаксис используется для настройки Jenkins?

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

Ответ

В Jenkins я использую Declarative Pipeline с Groovy-подобным DSL, который пишется в Jenkinsfile. Это позволяет хранить конфигурацию как код (IaC) в репозитории.

Пример базового Jenkinsfile:

pipeline {
    agent any
    options {
        timeout(time: 1, unit: 'HOURS')
    }
    environment {
        DOCKER_REGISTRY = 'registry.example.com'
    }
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
                archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml'
                }
            }
        }
        stage('Deploy to Staging') {
            when {
                branch 'main'
            }
            steps {
                sh 'kubectl apply -f k8s/staging/'
            }
        }
    }
}

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

  • agent — определяет, где выполнять сборку (docker, kubernetes, label)
  • stages/stage — логические этапы пайплайна
  • steps — конкретные команды (shell, bat, script)
  • post — постобработка (уведомления, очистка)
  • environment — переменные окружения
  • parameters — параметры ручного запуска
  • when — условное выполнение этапов

Для сложной логики использую Scripted Pipeline с полным Groovy, но Declarative предпочитаю из-за чёткой структуры и встроенных best practices.