2.3 Ключевые механизмы
Откат:
rollback() { local last_healthy=$(find /opt/releases -name "*.tar.gz" | sort -r | head -2 | tail -1) for server in $CLUSTER; do ssh www@$server "ln -sfn ${last_healthy} /current" health_check $server || error "Rollback failed on $server" done }
Проверки:
health_check() { local attempts=3 local timeout=5 for ((i=1; i<=attempts; i++)); do if curl -m $timeout -s http://$1/health | grep -q "OK"; then return 0 fi sleep $i done return 1 }
3. Интеграция с Git
3.1 Настройка Git-репозитория
Best Practices:
-
Branching model:
main ├── release/ ├── feature/ └── hotfix/
-
Хук для автоматизации:
#!/bin/sh # .git/hooks/post-receive while read oldrev newrev refname do if [ "$refname" = "refs/heads/main" ]; then /usr/bin/deploy-trigger.sh $newrev fi done
3.2 Версионность
Сборка метаданных:
generate_build_info() { cat > build-info.json <<EOF { "version": "$(git describe --tags)", "commit": "$(git rev-parse HEAD)", "date": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")", "built_by": "$(whoami)" } EOF }
4. Полный цикл деплоя
4.1 Пошаговый процесс
-
Подготовка:
# На всех серверах sudo mkdir -p /opt/{releases,shared} sudo chown -R www:www /opt/releases
-
Инициализация:
./deploy.sh init \ --repo=git@github.com:company/webapp.git \ --env=production \ --nodes=web{1..5}.company.com
-
Запуск:
./deploy.sh deploy --version=1.2.3 --rollback-on-error
4.2 Мониторинг
Метрики:
-
Время деплоя
-
Количество успешных/неудачных
-
Время отката
Логирование:
{ "timestamp": "2023-04-20T14:32:45Z", "action": "deploy", "version": "1.2.3", "status": "success", "duration_sec": 142, "servers": ["web1","web2","web3"] }
5. Дополнительные материалы
5.1 Чеклист перед продакшен-деплоем
-
Проверка backup
-
Уведомление команды
-
Подготовка rollback-плана
-
Проверка мониторинга
-
Внешние зависимости
5.2 Оптимизации
Кэширование: