Junior
CI/CD ning asosiy bosqichlari haqida gapirib bering.
sobes.tech AI
AIdan javob
Konseptual ravishda CI/CD ikki asosiy bosqichga bo'linadi:
-
Continuous Integration (CI):
- Commit (O'zgartirishlarni saqlash): Dasturchilar umumiy kod omboriga o'zgarishlarni saqlaydilar (masalan, Git).
- Build (Yig'ish): Ilovani manba kodidan avtomatik ravishda yig'ish.
- Test (Sinov): Avtomatlashtirilgan testlar (birlik, integratsiya, statik analizatorlar) o'tkaziladi.
-
Continuous Delivery/Deployment (CD):
- Deploy to Staging (Stage-ga joylashtirish): Muvaffaqiyatli yig'ilgan va sinovdan o'tgan artefakt muqobil muhitga (Stage) joylashtiriladi, ishlab chiqarishni taqlid qiladi.
- Automated Acceptance Testing (Avtomatlashtirilgan qabul qilish testlari): Stage muhitida biznes logikasini tekshirish uchun avtomatlashtirilgan qabul qilish testlari o'tkaziladi.
- Manual Testing/Exploratory Testing (Qo'lda/Izlanish testlari): Zarur bo'lsa, Stage-da qo'lda test o'tkaziladi.
- Deploy to Production (Ishlab chiqarishga joylashtirish): Barcha bosqichlardan muvaffaqiyatli o'tgach, artefakt ishlab chiqarish muhitiga joylashtiriladi. Continuous Deployment holatida bu bosqich to'liq avtomatlashtirilgan. Continuous Delivery holatida esa, qo'lda tasdiqlash talab qilinishi mumkin.
- Monitoring and Feedback (Monitoring va fikr-mulohaza): Joylashtirishdan so'ng, ishlab chiqarishdagi ilova ishlashini monitoring qilish va muammolarni aniqlash uchun fikr-mulohaza yig'iladi.
Jenkinsfile misoli:
// Jenkinsfile
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean install -DskipTests' // Maven yig'ish misoli, testlarni o'tkazmaslik
}
}
stage('Test') {
steps {
sh 'mvn test' // Birlik va integratsiya testlarini ishga tushirish
}
post {
always {
junit '**/TEST-*.xml' // Test natijalarini e'lon qilish
}
}
}
stage('Static Analysis') {
steps {
sh 'mvn sonar:sonar' // SonarQube bilan statik tahlil misoli
}
}
stage('Build Docker Image') {
steps {
script {
docker.build("my-app:${env.BUILD_NUMBER}") // Yig'ish raqamiga tegishli Docker-rasmni yig'ish
}
}
}
stage('Deploy to Stage') {
steps {
sh 'ssh user@stage-server "deploy_script.sh my-app:${env.BUILD_NUMBER}"' // Stage-ga joylashtirish misoli SSH orqali
}
}
stage('Acceptance Tests') {
steps {
sh 'run_acceptance_tests.sh' // Stage-da avtomatlashtirilgan qabul qilish testlarini ishga tushirish
}
}
stage('Deploy to Production') {
when {
environment name: 'CONTINUOUS_DEPLOYMENT', value: 'true' // Avtomatik ishlab chiqarishga joylashtirish uchun shart misoli
}
steps {
sh 'ssh user@prod-server "deploy_script.sh my-app:${env.BUILD_NUMBER}"' // Ishlab chiqarishga joylashtirish
}
}
stage('Manual Approval for Production') { // Bu bosqich Continuous Delivery uchun qo'shilishi mumkin
when {
environment name: 'CONTINUOUS_DEPLOYMENT', value: 'false'
}
steps {
input message: 'Ishlab chiqarishga joylashtirishni tasdiqlaysizmi?', ok: 'Joylashtirish'
sh 'ssh user@prod-server "deploy_script.sh my-app:${env.BUILD_NUMBER}"'
}
}
}
post {
failure {
mail to: 'devops@example.com', subject: "Yig'ish ${env.BUILD_NUMBER} muvaffaqiyatsiz bo'ldi", body: "Yig'ish ${env.JOB_NAME} uchun muvaffaqiyatsiz bo'ldi" // Xabar yuborish
}
success {
mail to: 'devops@example.com', subject: "Yig'ish ${env.BUILD_NUMBER} muvaffaqiyatli bajarildi", body: "Yig'ish ${env.JOB_NAME} uchun muvaffaqiyatli bajarildi" // Xabar yuborish
}
}
}
Continuous Delivery va Continuous Deployment o'rtasidagi asosiy farqlar:
| Xususiyat | Continuous Delivery | Continuous Deployment |
|---|---|---|
| Ishlab chiqarishga joylashtirish | Qo'lda tasdiqlash talab qilinadi | To'liq avtomatlashtirilgan |
| Yuklamalar chastotasi | Tez-tez joylashtirish imkoniyati | Har muvaffaqiyatli o'zgarishdan so'ng joylashtirish |
| Barqarorlik | Yuqori, lekin qo'lda nazorat bilan | Maksimal darajada yuqori, avtomatlashtirilgan testlar bilan |
| Xavf | Kamroq, qo'lda nazorat tufayli | Ko'proq, lekin keng qamrovli testlar bilan kamaytiriladi |
Har bir bosqich avtomatlashtirilgan bo'lishi va o'ziga xos vazifasini bajarishi kerak.