Ответ
В 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.