Junior
CI/CD негизги этаптары жөнүндө айтып бериңиз.
sobes.tech AI
AIден жооп
Концептуалдуу түрдө CI/CD эки негизги этапка бөлүнөт:
-
Текшерүү (CI):
- Commit (Өзгөртүүлөрдү бекитүү): Өнүктүрүүчүлөр өзгөртүүлөрдү жалпы код сактагычта бекитет (мисалы, Git).
- Build (Жыйноо): Колдонмону автоматтык түрдө түзүү башталат чыгуу кодунан.
- Test (Текшерүү): Автоматташтырылган тесттер өтөт (бирдик, интеграциялык, статикалык анализаторлор).
-
Текшерүүнүн үзгүлтүксүз жеткирүү/таратуу (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}" // Ийгиликтүү кабарлоо
}
}
}
Континууус Доставка жана Континууус Деплоймент ортосунда негизги айырмачылыктар:
| Өзгөчөлүк | Континууус Доставка | Континууус Деплоймент |
|---|---|---|
| Өнүмгө жайгаштыруу | Ручной бекитүү талап кылынат | Толук автоматташтырылган |
| Жайгаштыруу жыштыгы | Жиі жасалышы мүмкүн | Ар бир ийгиликтүү өзгөртүүдөн кийин жасалат |
| Тынчтыктык | Жогорку, бирок ручной көзөмөл менен | Максималдуу жогорку автоматташтырылган тесттер менен |
| Рисктер | Төмөн, ручной көзөмөлдөнүү менен | Жогору, бирок кеңири тестирлөө менен азайтыла турган |
Ар бир этап автоматташтырылган жана өзүнүн өзгөчө милдетин аткарууга тийиш.