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