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:
-
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.
-
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.