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:
-
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.
-
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.