Sobes.tech
Junior

CI/CD'nin temel aşamalarını anlat.

sobes.tech yapay zeka

AI'dan gelen yanıt

Kavramsal olarak, CI/CD iki ana aşamaya ayrılır:

  1. Sürekli Entegrasyon (CI):

    • Commit (Değişiklikleri Kaydet): Geliştiriciler, ortak kod deposuna (ör. Git) değişiklikleri kaydeder.
    • Build (Derleme): Uygulama, kaynak kodundan otomatik olarak derlenir.
    • Test (Testler): Otomatikleştirilmiş testler (birim, entegrasyon, statik analizörler) çalıştırılır.
  2. Sürekli Teslimat/Dağıtım (CD):

    • Staging'e Dağıtım: Başarılı şekilde derlenmiş ve test edilmiş artefakt, üretimi taklit eden ara ortama (Stage) dağıtılır.
    • Otomatik Kabul Testleri: İş mantığını kontrol etmek için Stage'de otomatik kabul testleri yapılır.
    • Manuel Testler/Keşif Testleri: Gerekirse, Stage'de manuel testler yapılır.
    • Üretime Dağıtım: Tüm önceki aşamaları başarıyla geçtikten sonra, artefakt üretime dağıtılır. Sürekli Dağıtım'da bu aşama tamamen otomatikleştirilmiştir. Sürekli Teslimat'ta ise manuel onay gerekebilir.
    • İzleme ve Geri Bildirim: Dağıtımdan sonra, uygulamanın üretimdeki çalışması izlenir ve sorunlar tespit edilip geri bildirim toplanır.

İşte Jenkinsfile'da bir pipeline örneği:

// Jenkinsfile
pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                sh 'mvn clean install -DskipTests' // Maven derleme örneği, testleri atla
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test' // Birim ve entegrasyon testleri çalıştır
            }
            post {
                always {
                    junit '**/TEST-*.xml' // Test sonuçlarını yayınla
                }
            }
        }
        stage('Static Analysis') {
           steps {
               sh 'mvn sonar:sonar' // SonarQube ile statik analiz örneği
           }
        }
        stage('Build Docker Image') {
            steps {
                script {
                    docker.build("my-app:${env.BUILD_NUMBER}") // Derleme numarası etiketiyle Docker imajı oluştur
                }
            }
        }
        stage('Deploy to Stage') {
            steps {
                sh 'ssh user@stage-server "deploy_script.sh my-app:${env.BUILD_NUMBER}"' // Stage'e dağıtım örneği
            }
        }
        stage('Acceptance Tests') {
            steps {
                sh 'run_acceptance_tests.sh' // Stage'de otomatik kabul testleri
            }
        }
        stage('Deploy to Production') {
            when {
                environment name: 'CONTINUOUS_DEPLOYMENT', value: 'true' // Otomatik dağıtım koşulu
            }
            steps {
                sh 'ssh user@prod-server "deploy_script.sh my-app:${env.BUILD_NUMBER}"' // Üretime dağıtım
            }
        }
        stage('Manual Approval for Production') { // Bu aşama, Sürekli Teslimat'ta olabilir
           when {
              environment name: 'CONTINUOUS_DEPLOYMENT', value: 'false'
           }
           steps {
             input message: 'Üretime dağıtım?', ok: 'Şimdi dağıt'
             sh 'ssh user@prod-server "deploy_script.sh my-app:${env.BUILD_NUMBER}"'
           }
        }
    }
    post {
        failure {
            mail to: 'devops@example.com', subject: "Build ${env.BUILD_NUMBER} Başarısız", body: "Build ${env.JOB_NAME} için başarısız oldu"
        }
        success {
            mail to: 'devops@example.com', subject: "Build ${env.BUILD_NUMBER} Başarılı", body: "Build ${env.JOB_NAME} için başarılı"
        }
    }
}

Sürekli Teslimat ile Sürekli Dağıtım arasındaki temel farklar:

Özellik Sürekli Teslimat Sürekli Dağıtım
Üretime Dağıtım Manuel onay gerektirir Tam otomatik
Dağıtım Sıklığı Sık sık dağıtım yapılabilir Her başarılı değişiklikte dağıtım yapılır
İstikrar Yüksek, ancak manuel kontrol ile Maksimum, uygun otomatik testlerle
Riskler Manuel kontrol nedeniyle daha düşük Daha yüksek, ancak kapsamlı testlerle azaltılır

Her pipeline aşaması otomatik olmalı ve kendi özel görevini yerine getirmelidir.