Sobes.tech
Junior

CI/CD негизги этаптары жөнүндө айтып бериңиз.

sobes.tech AI

AIден жооп

Концептуалдуу түрдө CI/CD эки негизги этапка бөлүнөт:

  1. Текшерүү (CI):

    • Commit (Өзгөртүүлөрдү бекитүү): Өнүктүрүүчүлөр өзгөртүүлөрдү жалпы код сактагычта бекитет (мисалы, Git).
    • Build (Жыйноо): Колдонмону автоматтык түрдө түзүү башталат чыгуу кодунан.
    • Test (Текшерүү): Автоматташтырылган тесттер өтөт (бирдик, интеграциялык, статикалык анализаторлор).
  2. Текшерүүнүн үзгүлтүксүз жеткирүү/таратуу (CD):

    • Deploy to Staging (Stageке жайгаштыруу): Ийгиликтүү түзүлгөн жана тесттелген артефакт аралык чөйрөгө (Stage) жайгаштырылат, ал өнүмдү имитациялайт.
    • Автоматташтырылган кабыл алуу тесттери (Acceptance Testing): Stage чөйрөсүндө автоматташтырылган кабыл алуу тесттери бизнес логикасын текшерүү үчүн жүргүзүлөт.
    • Ручной тестирлөө/Изилдөө тестирлөө (Manual/Exploratory Testing): Керек учурда Stageте ручной тестирлөө жүргүзүлөт.
    • Deploy to Production (Өнүмгө жайгаштыруу): Бардык алдынкы этаптар ийгиликтүү өтсө, артефакт өндүрүш чөйрөсүнө жайгаштырылат. Континууус Деплоймент учурда бул этап толугу менен автоматташтырылган. Континууус Доставка учурда, ручной бекитүү талап кылынышы мүмкүн.
    • Мониторинг жана пикирлер (Monitoring and Feedback): Жайгаштырылгандан кийин, колдонмонун ишин көзөмөлдөө, көйгөйлөрдү аныктоо жана пикирлерди чогултуу.

Мисал үчүн Jenkinsfile:

// Jenkinsfile
pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                sh 'mvn clean install -DskipTests' // Maven менен түзүү, тесттерди өткөрүп жиберүү
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test' // Бирдик жана интеграциялык тесттерди иштетүү
            }
            post {
                always {
                    junit '**/TEST-*.xml' // Тест натыйжаларын жарыялоо
                }
            }
        }
        stage('Static Analysis') {
           steps {
               sh 'mvn sonar:sonar' // SonarQube менен статикалык анализ
           }
        }
        stage('Build Docker Image') {
            steps {
                script {
                    docker.build("my-app:${env.BUILD_NUMBER}") // Билд номерине тэг коюлган Docker сүрөтүн түзүү
                }
            }
        }
        stage('Deploy to Stage') {
            steps {
                sh 'ssh user@stage-server "deploy_script.sh my-app:${env.BUILD_NUMBER}"' // Stageке SSH аркылуу жайгаштыруу
            }
        }
        stage('Acceptance Tests') {
            steps {
                sh 'run_acceptance_tests.sh' // Stageте автоматташтырылган кабыл алуу тесттерин иштетүү
            }
        }
        stage('Deploy to Production') {
            when {
                environment name: 'CONTINUOUS_DEPLOYMENT', value: 'true' // автоматтык жайгаштыруу шарттары
            }
            steps {
                sh 'ssh user@prod-server "deploy_script.sh my-app:${env.BUILD_NUMBER}"' // Өнүмгө жайгаштыруу
            }
        }
        stage('Manual Approval for Production') { // Бул этап Континууус Доставка үчүн кошулушу мүмкүн
           when {
              environment name: 'CONTINUOUS_DEPLOYMENT', value: 'false'
           }
           steps {
             input message: 'Deploy to Production?', ok: 'Deploy Now'
             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} Failed", body: "Build failed for ${env.JOB_NAME}" // Авария жөнүндө кабарлоо
        }
        success {
            mail to: 'devops@example.com', subject: "Build ${env.BUILD_NUMBER} Succeeded", body: "Build succeeded for ${env.JOB_NAME}" // Ийгиликтүү кабарлоо
        }
    }
}

Континууус Доставка жана Континууус Деплоймент ортосунда негизги айырмачылыктар:

Өзгөчөлүк Континууус Доставка Континууус Деплоймент
Өнүмгө жайгаштыруу Ручной бекитүү талап кылынат Толук автоматташтырылган
Жайгаштыруу жыштыгы Жиі жасалышы мүмкүн Ар бир ийгиликтүү өзгөртүүдөн кийин жасалат
Тынчтыктык Жогорку, бирок ручной көзөмөл менен Максималдуу жогорку автоматташтырылган тесттер менен
Рисктер Төмөн, ручной көзөмөлдөнүү менен Жогору, бирок кеңири тестирлөө менен азайтыла турган

Ар бир этап автоматташтырылган жана өзүнүн өзгөчө милдетин аткарууга тийиш.