Sobes.tech
Junior

Porozprávaj o hlavných krokoch CI/CD.

sobes.tech AI

Odpoveď od AI

Konceptuálne sa CI/CD delí na dva hlavné etapy:

  1. Kontinuálna integrácia (CI):

    • Commit (Fixácia zmien): Vývojári zaznamenávajú zmeny v spoločnom repozitári kódu (napríklad Git).
    • Build (Skladanie): Automaticky sa spúšťa zostavenie aplikácie zo zdrojového kódu.
    • Test (Testovanie): Prebiehajú automatizované testy (unit, integračné, statické analyzátory).
  2. Kontinuálne doručovanie/Deployment (CD):

    • Deploy to Staging (Nasadenie na Stage): Úspešne zostavený a otestovaný artefakt sa nasadzuje do medzičase (Stage), ktorý simuluje produkciu.
    • Automatické akceptačné testovanie (Acceptance Testing): Na Stage prostredí sa vykonávajú automatizované akceptačné testy na overenie biznis logiky.
    • Manuálne testovanie/Prieskumné testovanie (Manual/Exploratory Testing): V prípade potreby sa vykonáva manuálne testovanie na Stage.
    • Deploy to Production (Nasadenie do Production): Po úspešnom prechode všetkých predchádzajúcich etáp sa artefakt nasadí do produkčného prostredia. V prípade Continuous Deployment je tento krok úplne automatizovaný. V prípade Continuous Delivery môže byť potrebné manuálne potvrdenie.
    • Monitoring a spätná väzba (Monitoring and Feedback): Po nasadení sa monitoruje prevádzka aplikácie v produkcii na identifikáciu problémov a zber spätnej väzby.

Tu je príklad Jenkinsfile:

// Jenkinsfile
pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                sh 'mvn clean install -DskipTests' // Príklad build s Maven, preskočenie testov v tomto kroku
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test' // Spustenie unit a integračných testov
            }
            post {
                always {
                    junit '**/TEST-*.xml' // Zverejnenie výsledkov testov
                }
            }
        }
        stage('Static Analysis') {
           steps {
               sh 'mvn sonar:sonar' // Príklad statickej analýzy so SonarQube
           }
        }
        stage('Build Docker Image') {
            steps {
                script {
                    docker.build("my-app:${env.BUILD_NUMBER}") // Skladanie Docker obrazu s tagom podľa čísla build
                }
            }
        }
        stage('Deploy to Stage') {
            steps {
                sh 'ssh user@stage-server "deploy_script.sh my-app:${env.BUILD_NUMBER}"' // Príklad nasadenia na Stage cez SSH
            }
        }
        stage('Acceptance Tests') {
            steps {
                sh 'run_acceptance_tests.sh' // Spustenie automatických akceptačných testov na Stage
            }
        }
        stage('Deploy to Production') {
            when {
                environment name: 'CONTINUOUS_DEPLOYMENT', value: 'true' // Príklad podmienky pre automatické nasadenie do Production
            }
            steps {
                sh 'ssh user@prod-server "deploy_script.sh my-app:${env.BUILD_NUMBER}"' // Nasadenie do Production
            }
        }
        stage('Manual Approval for Production') { // Tento krok môže byť zahrnutý pre Continuous Delivery
           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}" // Odoslanie upozornenia o neúspechu
        }
        success {
            mail to: 'devops@example.com', subject: "Build ${env.BUILD_NUMBER} Succeeded", body: "Build succeeded for ${env.JOB_NAME}" // Odoslanie upozornenia o úspechu
        }
    }
}

Hlavné rozdiely medzi Continuous Delivery a Continuous Deployment:

Charakteristika Continuous Delivery Continuous Deployment
Nasadenie do Production Vyžaduje manuálne potvrdenie Plne automatizované
Frekvencia nasadení Možnosť často nasadzovať Nasadenie sa vykonáva pri každej úspešnej zmene
Stabilita Vysoká, ale s manuálnou kontrolou Maximálna vysoká pri vhodných automatizovaných testoch
Riziká Nižšie kvôli manuálnej kontrole Vyššie, ale znižujú sa komplexným testovaním

Každý krok v pipeline by mal byť automatizovaný a plniť svoju špecifickú úlohu.