Sobes.tech
Junior

Mesélj a CI/CD fő lépéseiről.

sobes.tech MI

Válasz az MI-től

Koncepcionálisan a CI/CD két fő szakaszra oszlik:

  1. Folyamatos Integráció (CI):

    • Commit (Változások rögzítése): A fejlesztők a közös kódtárba rögzítik a változásokat (pl. Git).
    • Build (Építés): Az alkalmazás automatikusan épül a forráskódból.
    • Test (Tesztelés): Automatizált tesztek (egység, integrációs, statikus elemzők) futnak.
  2. Folyamatos Szállítás/Deploy (CD):

    • Deploy staging környezetbe: A sikeresen épített és tesztelt artefakt a köztes környezetbe (Stage) kerül, amely utánozza a gyártási környezetet.
    • Automatizált elfogadási tesztek: A Stage környezetben automatizált elfogadási tesztek futnak a üzleti logika ellenőrzésére.
    • Kézi/Exploratory tesztek: Szükség esetén kézi tesztelés történik a Stage-en.
    • Deploy a gyártási környezetbe: Minden előző lépés sikeres befejezése után az artefakt a gyártási környezetbe kerül. A Continuous Deployment esetén ez a lépés teljesen automatizált. A Continuous Delivery esetén szükség lehet kézi megerősítésre.
    • Monitoring és visszacsatolás: A deploy után figyelemmel kísérik az alkalmazás működését a gyártásban, problémák azonosítása és visszacsatolás gyűjtése céljából.

Példa Jenkinsfile:

// Jenkinsfile
pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                sh 'mvn clean install -DskipTests' // Maven építési példa, tesztek kihagyása
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test' // Egység- és integrációs tesztek futtatása
            }
            post {
                always {
                    junit '**/TEST-*.xml' // Teszt eredmények publikálása
                }
            }
        }
        stage('Static Analysis') {
           steps {
               sh 'mvn sonar:sonar' // Statikus elemzés SonarQube segítségével
           }
        }
        stage('Build Docker Image') {
            steps {
                script {
                    docker.build("my-app:${env.BUILD_NUMBER}") // Docker kép építése a build számával címkézve
                }
            }
        }
        stage('Deploy to Stage') {
            steps {
                sh 'ssh user@stage-server "deploy_script.sh my-app:${env.BUILD_NUMBER}"' // Deploy a Stage-re SSH-n keresztül
            }
        }
        stage('Acceptance Tests') {
            steps {
                sh 'run_acceptance_tests.sh' // Automatikus elfogadási tesztek futtatása Stage-en
            }
        }
        stage('Deploy to Production') {
            when {
                environment name: 'CONTINUOUS_DEPLOYMENT', value: 'true' // Automatikus deploy feltétele
            }
            steps {
                sh 'ssh user@prod-server "deploy_script.sh my-app:${env.BUILD_NUMBER}"' // Deploy a gyártásba
            }
        }
        stage('Manual Approval for Production') { // Ez a lépés hozzáadható a Continuous Delivery-hez
           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}" // Értesítés a hibáról
        }
        success {
            mail to: 'devops@example.com', subject: "Build ${env.BUILD_NUMBER} Succeeded", body: "Build succeeded for ${env.JOB_NAME}" // Értesítés a sikeres buildről
        }
    }
}

A Continuous Delivery és a Continuous Deployment közötti fő különbségek:

Jellemző Continuous Delivery Continuous Deployment
Deploy a gyártásba Kézi megerősítést igényel Teljesen automatizált
Deploy gyakorisága Gyakran lehet deployelni Minden sikeres változtatásnál deployel
Stabilitás Magas, de kézi ellenőrzéssel Maximális, megfelelő automatizált tesztekkel
Kockázatok Alacsonyabb a kézi ellenőrzés miatt Magasabb, de komplex tesztekkel csökkentett

Minden pipeline szakasznak automatizáltnak kell lennie, és saját feladatát kell ellátnia.