← Назад к вопросам
Какие знаешь основные этапы CI/CD?
1.6 Junior🔥 221 комментариев
#CI/CD и автоматизация
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI21 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Основные этапы CI/CD pipeline
Что такое CI/CD
CI/CD — это автоматизация процесса разработки, тестирования и развёртывания приложений:
- CI (Continuous Integration) — непрерывная интеграция кода
- CD (Continuous Deployment/Delivery) — непрерывное развёртывание в production
Архитектура типичного CI/CD pipeline
Разработчик пушит код
↓
[SCM] Git push
↓
[TRIGGER] Webhook → CI/CD сервер
↓
[BUILD] Компиляция, зависимости
↓
[TEST] Unit, Integration, E2E тесты
↓
[ANALYZE] SonarQube, security scanning
↓
[ARTIFACT] Packaging (Docker image, JAR, WAR)
↓
[REGISTRY] Push in Docker Registry / Artifactory
↓
[DEPLOY] Staging → Production
↓
[VERIFY] Smoke tests, Health checks
↓
[MONITOR] Logs, Metrics, Alerts
1. Trigger (Инициирование)
Способы запуска pipeline:
# GitHub Actions trigger
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
schedule:
- cron: '0 2 * * *' # Nightly build
# GitLab CI trigger
schedule:
- if: '$CI_COMMIT_BRANCH == "main"'
when: push
Типы триггеров:
- Push в main/develop branch
- Pull request создан/обновлён
- Tag (релиз)
- Расписание (nightly builds)
- Manual trigger
- Webhook от стороннего сервиса
2. Checkout (Получение кода)
# CI/CD сервер клонирует репозиторий
git clone https://github.com/org/repo.git
git checkout $CI_COMMIT_SHA
3. Build (Сборка)
Компиляция кода и подготовка артефактов:
# Java
mvn clean package
# Node.js
npm install
npm run build
# Python
pip install -r requirements.txt
python setup.py build
# Go
go build -o app
# Docker image
docker build -t app:$VERSION .
4. Unit & Integration Tests (Тестирование)
Запуск автоматических тестов:
# Unit тесты
npm test
mvn test
pytest tests/
# Coverage
npm run test:coverage
mvn jacoco:report
# Integration тесты
npm run test:integration
mvn verify
# E2E тесты (Playwright, Cypress)
playwright test
npm run test:e2e
Требование: coverage >= 80-90%
5. Code Quality Analysis (Анализ качества)
Проверка стиля и уязвимостей:
# Linting
npm run lint
pylint src/
golangci-lint run
# Security scanning
npm audit
safety check # Python
gosec ./...
# SonarQube analysis
sonar-scanner \
-Dsonar.projectKey=my-app \
-Dsonar.sources=src
# Container scanning
trivy image myapp:latest
6. Artifact Creation (Создание артефакта)
Упаковка и публикация:
# Docker image
docker build -t myapp:$CI_COMMIT_SHA .
docker tag myapp:$CI_COMMIT_SHA myapp:latest
docker push gcr.io/myproject/myapp:$CI_COMMIT_SHA
# JAR
mvn clean package -DskipTests
# Артефакт: target/app-1.0.0.jar
# NPM package
npm publish
# Python package
twine upload dist/*
7. Push to Registry (Публикация)
# Docker Registry
docker push gcr.io/project/app:latest
# Artifactory
curl -u user:pass -T app.jar http://artifactory/repo/app.jar
# Package managers
npm publish
pip upload dist/*
8. Deploy to Staging (Развёртывание в Staging)
Первая среда для тестирования:
# GitLab CI deployment
deploy-staging:
stage: deploy
script:
- kubectl set image deployment/app app=myapp:$CI_COMMIT_SHA -n staging
- kubectl rollout status deployment/app -n staging
environment:
name: staging
url: https://staging.example.com
only:
- develop
9. Smoke Tests (Проверка на дыме)
Базовые проверки после развёртывания:
#!/bin/bash
# Проверка health endpoint
curl -f https://staging.example.com/health || exit 1
# Проверка версии приложения
VERSION=$(curl https://staging.example.com/api/version)
echo "Deployed version: $VERSION"
# Базовый функциональный тест
curl -X POST https://staging.example.com/api/test
10. Approval & Deploy to Production
Manual approval
# GitHub Actions
deployment_review:
runs-on: ubuntu-latest
needs: deploy-staging
environment:
name: production
url: https://example.com
steps:
- name: Deploy
run: kubectl set image deployment/app app=myapp:${{ github.sha }}
Deployment strategies
# 1. Rolling deployment (постепенный)
kubectl set image deployment/app app=myapp:new
kubectl rollout status deployment/app
# 2. Blue-Green deployment
kubectl apply -f deployment-green.yaml
kubectl patch service app -p '{"spec":{"selector":{"color":"green"}}}'
# 3. Canary deployment (5% → 50% → 100%)
# Argo Rollouts или Flagger
kubectl argo rollouts set image myapp myapp=new:version --all
11. Health Checks & Validation
#!/bin/bash
# Проверка приложения в production
# 1. HTTP status
STATUS=$(curl -o /dev/null -s -w "%{http_code}" https://example.com)
if [ $STATUS -ne 200 ]; then
echo "FAILED: HTTP status $STATUS"
exit 1
fi
# 2. Response time
RESPONSE_TIME=$(curl -o /dev/null -s -w "%{time_total}" https://example.com)
if [ ${RESPONSE_TIME%.*} -gt 2 ]; then
echo "FAILED: Response time $RESPONSE_TIME"
exit 1
fi
# 3. Database connectivity
psql -h db.example.com -U user -d db -c "SELECT 1" > /dev/null || exit 1
12. Monitoring & Alerts
# Prometheus alert rules
alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05
for: 5m
alert: HighResponseTime
expr: histogram_quantile(0.95, http_request_duration_seconds) > 2
for: 10m
alert: PodCrashLooping
expr: rate(kube_pod_container_status_restarts_total[15m]) > 0
for: 5m
Типовой Gitlab CI/CD pipeline
stages:
- build
- test
- analyze
- package
- deploy-staging
- deploy-production
build:
stage: build
script:
- npm install
- npm run build
artifacts:
paths:
- dist/
test:unit:
stage: test
script:
- npm test -- --coverage
coverage: '/Coverage: (\d+)%/'
test:e2e:
stage: test
script:
- npm run test:e2e
analyze:sonar:
stage: analyze
script:
- sonar-scanner
package:docker:
stage: package
script:
- docker build -t myapp:$CI_COMMIT_SHA .
- docker push gcr.io/project/myapp:$CI_COMMIT_SHA
only:
- main
deploy:staging:
stage: deploy-staging
script:
- kubectl set image deployment/app app=myapp:$CI_COMMIT_SHA -n staging
- kubectl rollout status deployment/app -n staging
environment:
name: staging
url: https://staging.example.com
deploy:production:
stage: deploy-production
script:
- kubectl set image deployment/app app=myapp:$CI_COMMIT_SHA -n production
- kubectl rollout status deployment/app -n production
environment:
name: production
url: https://example.com
when: manual # Manual approval
only:
- main
Ключевые метрики CI/CD
| Метрика | Идеал | Хорошо | Плохо |
|---|---|---|---|
| Build time | <5 мин | <10 мин | >20 мин |
| Test coverage | >90% | >80% | <70% |
| Deployment frequency | Daily | Weekly | Monthly |
| Lead time | <1 day | <1 week | >1 month |
| MTTR (Mean Time To Recover) | <30 min | <1 hour | >4 hours |
Best Practices
- Быстрый feedback — пайплайн должен выполняться за 5-10 минут
- Раннее тестирование — тесты запускаются как можно раньше
- Артефакты один раз — собирай один раз, используй везде
- Окружения как код — staging и production идентичны (IaC)
- Откат — каждый deployment должен быть откатываемым
- Мониторинг — настрой alerting ДО развёртывания в production
- Документация — runbooks для инцидентов
- Безопасность — secrets в vault, не в коде
Это система, которая превращает pull request в production готовый код за минуты, с полной автоматизацией и контролем качества.