Sobes.tech
Junior

CI/CD ning asosiy bosqichlari haqida gapirib bering.

sobes.tech AI

AIdan javob

Konseptual ravishda CI/CD ikki asosiy bosqichga bo'linadi:

  1. 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.
  2. 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.