Jenkins Declarative Pipeline ile Build Otomasyonu
Yazılım geliştirme süreçlerinde build otomasyonu, kodun derlenmesi, test edilmesi ve paketlenmesi gibi adımların tekrarlanabilir ve hatasız bir şekilde gerçekleştirilmesi için kritik öneme sahiptir. Jenkins Declarative Pipeline, bu süreçleri basit, okunabilir ve sürdürülebilir bir DSL (Domain Specific Language) ile tanımlamanın modern yolunu sunar.
Declarative Pipeline, Scripted Pipeline'a kıyasla daha yapısal ve kısıtlayıcıdır, bu da onu daha kolay öğrenilebilir ve yönetilebilir kılar. Belirli aşamalar (stages) ve adımlar (steps) halinde tanımlanan iş akışları, karmaşık build süreçlerini görsel olarak daha anlaşılır hale getirir.
Temel Declarative Pipeline Yapısı
Bir Jenkins Declarative Pipeline, bir Jenkinsfile içinde tanımlanır ve projenizin kök dizininde bulunur. Temel yapısı aşağıdaki gibidir:
pipeline { agent any stages { stage('Checkout Kodu') { steps { git 'https://github.com/ornek/repo.git' } } stage('Build Uygulama') { steps { echo 'Uygulama build ediliyor...' // Maven, Gradle, NPM gibi build komutları burada yer alır sh 'mvn clean install' } } stage('Test Uygulama') { steps { echo 'Unit testler çalıştırılıyor...' sh 'mvn test' } } } post { always { echo 'Pipeline tamamlandı.' } failure { echo 'Pipeline başarısız oldu!' } } }Yukarıdaki örnekte:
pipeline: Tüm pipeline'ı kapsayan bloktur.agent any: Pipeline'ın herhangi bir müsait Jenkins agent'ı üzerinde çalışacağını belirtir. Özel agent'lar (örneğin Docker container'ları) tanımlanabilir.stages: Pipeline'ın ana iş akışını oluşturan bir dizistageiçerir.stage: Belirli bir görevi (örneğin kod çekme, build etme) temsil eder. Her stage'in kendine ait bir adı vardır.steps: Bir stage içinde çalıştırılacak komutları veya Jenkins adımlarını (örneğinsh,echo,git) içerir.post: Pipeline'ın sonunda (başarılı, başarısız, her zaman vb.) çalıştırılacak eylemleri tanımlar.
Gerçek Dünya Senaryosu: Çok Katmanlı Uygulama Build Otomasyonu
Bir e-ticaret uygulamasını düşünelim. Bu uygulama, bir Java tabanlı Spring Boot backend'i ve bir React tabanlı frontend'e sahip. Her iki katmanın da ayrı build ve test süreçleri var ve sonrasında Docker imajlarına dönüştürülüp bir container registry'ye gönderilmesi gerekiyor. İşte bu senaryo için bir Jenkinsfile örneği:
pipeline { agent { label 'docker-enabled-agent' } environment { DOCKER_REGISTRY = 'myregistry.com/ecommerce' APP_VERSION = '1.0.${BUILD_NUMBER}' } stages { stage('Checkout Source') { steps { git credentialsId: 'github-cred', url: 'https://github.com/ecommerce/monorepo.git' } } stage('Backend Build') { steps { dir('backend') { sh 'mvn clean package -DskipTests' } } } stage('Backend Unit Tests') { steps { dir('backend') { sh 'mvn test' } } } stage('Frontend Build') { steps { dir('frontend') { sh 'npm install' sh 'npm run build' } } } stage('Frontend Unit Tests') { steps { dir('frontend') { sh 'npm test' } } } stage('Docker Image Build & Push') { steps { script { // Backend Docker Image Build & Push sh