🔧 Enhanced update script with remote repository selection
- Add support for origin/backup remote selection - Improved Git conflict handling - Enhanced backup functionality - Updated documentation with usage examples - Better error handling and validation
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
### 🚀 `./update.sh` - Полное обновление проекта
|
||||
Выполняет полный цикл обновления:
|
||||
- Создание бэкапа в удаленном репозитории
|
||||
- Обновление кода из Git
|
||||
- Обновление кода из Git (origin или backup)
|
||||
- Остановка текущих контейнеров
|
||||
- Пересборка Docker образов
|
||||
- Запуск новых контейнеров
|
||||
@@ -17,12 +17,31 @@
|
||||
|
||||
**Использование:**
|
||||
```bash
|
||||
./update.sh # Полное обновление
|
||||
./update.sh # Обновление из origin (по умолчанию)
|
||||
./update.sh origin # Обновление из origin репозитория
|
||||
./update.sh backup # Обновление из backup репозитория
|
||||
./update.sh origin backup # Обновление из origin с бэкапом в backup
|
||||
./update.sh backup origin # Обновление из backup с бэкапом в origin
|
||||
./update.sh --help # Показать справку
|
||||
./update.sh --logs # Показать логи без обновления
|
||||
./update.sh --status # Показать статус сервисов
|
||||
```
|
||||
|
||||
**Примеры использования удаленных репозиториев:**
|
||||
```bash
|
||||
# Стандартное обновление из основного репозитория
|
||||
./update.sh
|
||||
|
||||
# Обновление из резервного репозитория (если основной недоступен)
|
||||
./update.sh backup
|
||||
|
||||
# Обновление из основного репозитория с созданием бэкапа в резервном
|
||||
./update.sh origin backup
|
||||
|
||||
# Переключение на резервный сервер с бэкапом в основной
|
||||
./update.sh backup origin
|
||||
```
|
||||
|
||||
### ▶️ `./start.sh` - Быстрый запуск
|
||||
Быстро запускает все сервисы проекта:
|
||||
- Запуск Docker контейнеров
|
||||
|
||||
94
update.sh
94
update.sh
@@ -66,22 +66,49 @@ cleanup_staticfiles() {
|
||||
|
||||
# Функция обновления кода
|
||||
update_code() {
|
||||
log "Обновление кода из репозитория..."
|
||||
local remote_name="${1:-origin}"
|
||||
log "Обновление кода из репозитория $remote_name..."
|
||||
|
||||
# Сохраняем изменения если есть
|
||||
if ! git diff --quiet; then
|
||||
# Проверяем существование удаленного репозитория
|
||||
if ! git remote | grep -q "^${remote_name}$"; then
|
||||
error "Удаленный репозиторий '$remote_name' не найден"
|
||||
log "Доступные репозитории:"
|
||||
git remote -v
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Настраиваем стратегию pull если не настроено
|
||||
if [ -z "$(git config pull.rebase 2>/dev/null)" ]; then
|
||||
log "Настраиваем стратегию Git pull..."
|
||||
git config pull.rebase false
|
||||
fi
|
||||
|
||||
# Сохраняем неотслеживаемые изменения
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
warning "Обнаружены локальные изменения, сохраняем..."
|
||||
git stash push -m "Auto stash before update $(date)"
|
||||
git add .
|
||||
git commit -m "Auto commit before update $(date '+%Y-%m-%d %H:%M:%S')" || true
|
||||
fi
|
||||
|
||||
# Получаем обновления
|
||||
git fetch origin
|
||||
log "Получение обновлений из $remote_name..."
|
||||
git fetch $remote_name
|
||||
|
||||
# Обновляем текущую ветку
|
||||
local current_branch=$(git rev-parse --abbrev-ref HEAD)
|
||||
git pull origin $current_branch
|
||||
local current_branch
|
||||
current_branch=$(git rev-parse --abbrev-ref HEAD)
|
||||
|
||||
success "Код обновлен с ветки $current_branch"
|
||||
# Пробуем обновить с обработкой конфликтов
|
||||
if ! git pull $remote_name $current_branch; then
|
||||
error "Не удалось обновить код. Возможно есть конфликты."
|
||||
log "Попробуйте выполнить команды вручную:"
|
||||
log " git status"
|
||||
log " git merge --abort # если нужно отменить"
|
||||
log " git pull $remote_name $current_branch"
|
||||
return 1
|
||||
fi
|
||||
|
||||
success "Код обновлен с ветки $current_branch из $remote_name"
|
||||
}
|
||||
|
||||
# Функция остановки контейнеров
|
||||
@@ -191,9 +218,10 @@ show_logs() {
|
||||
|
||||
# Функция бэкапа в удаленный репозиторий
|
||||
backup_to_remote() {
|
||||
log "Создание бэкапа в удаленном репозитории..."
|
||||
local backup_remote="${1:-backup}"
|
||||
log "Создание бэкапа в удаленном репозитории $backup_remote..."
|
||||
|
||||
if git remote | grep -q "backup"; then
|
||||
if git remote | grep -q "^${backup_remote}$"; then
|
||||
# Проверяем есть ли изменения для коммита
|
||||
if ! git diff --quiet || ! git diff --cached --quiet; then
|
||||
git add .
|
||||
@@ -201,18 +229,28 @@ backup_to_remote() {
|
||||
fi
|
||||
|
||||
# Пушим в backup
|
||||
git push backup master
|
||||
success "Бэкап создан в удаленном репозитории"
|
||||
if git push $backup_remote master; then
|
||||
success "Бэкап создан в удаленном репозитории $backup_remote"
|
||||
else
|
||||
warning "Backup репозиторий не настроен, пропускаем"
|
||||
warning "Не удалось создать бэкап в $backup_remote"
|
||||
fi
|
||||
else
|
||||
warning "$backup_remote репозиторий не настроен, пропускаем"
|
||||
fi
|
||||
}
|
||||
|
||||
# Главная функция
|
||||
main() {
|
||||
local remote_source="${1:-origin}"
|
||||
local backup_remote="${2:-backup}"
|
||||
|
||||
echo ""
|
||||
echo "🚀 SmartSolTech - Автоматическое обновление"
|
||||
echo "=========================================="
|
||||
echo "📡 Источник: $remote_source"
|
||||
if git remote | grep -q "^${backup_remote}$"; then
|
||||
echo "💾 Бэкап: $backup_remote"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Проверка что мы в правильной директории
|
||||
@@ -221,13 +259,14 @@ main() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local start_time=$(date +%s)
|
||||
local start_time
|
||||
start_time=$(date +%s)
|
||||
|
||||
# Выполняем все этапы
|
||||
check_dependencies
|
||||
backup_to_remote
|
||||
backup_to_remote "$backup_remote"
|
||||
cleanup_staticfiles
|
||||
update_code
|
||||
update_code "$remote_source"
|
||||
stop_containers
|
||||
build_images
|
||||
start_containers
|
||||
@@ -235,12 +274,14 @@ main() {
|
||||
collect_static
|
||||
health_check
|
||||
|
||||
local end_time=$(date +%s)
|
||||
local end_time
|
||||
end_time=$(date +%s)
|
||||
local duration=$((end_time - start_time))
|
||||
|
||||
echo ""
|
||||
echo "🎉 Обновление завершено успешно!"
|
||||
echo "⏱️ Время выполнения: ${duration} секунд"
|
||||
echo "📡 Источник обновления: $remote_source"
|
||||
echo ""
|
||||
echo "📊 Полезная информация:"
|
||||
echo " • Веб-сайт: http://localhost:8000"
|
||||
@@ -279,11 +320,20 @@ case "${1:-}" in
|
||||
echo "SmartSolTech - Скрипт автоматического обновления"
|
||||
echo ""
|
||||
echo "Использование:"
|
||||
echo " $0 - Полное обновление (по умолчанию)"
|
||||
echo " $0 - Полное обновление из origin (по умолчанию)"
|
||||
echo " $0 origin - Обновление из origin репозитория"
|
||||
echo " $0 backup - Обновление из backup репозитория"
|
||||
echo " $0 origin backup - Обновление из origin с бэкапом в backup"
|
||||
echo " $0 backup origin - Обновление из backup с бэкапом в origin"
|
||||
echo " $0 --help - Показать эту справку"
|
||||
echo " $0 --logs - Показать логи без обновления"
|
||||
echo " $0 --status - Показать статус без обновления"
|
||||
echo ""
|
||||
echo "Примеры:"
|
||||
echo " $0 # обновление из origin"
|
||||
echo " $0 backup # обновление из backup репозитория"
|
||||
echo " $0 origin backup # обновление из origin, бэкап в backup"
|
||||
echo ""
|
||||
exit 0
|
||||
;;
|
||||
--logs)
|
||||
@@ -295,12 +345,8 @@ case "${1:-}" in
|
||||
health_check
|
||||
exit 0
|
||||
;;
|
||||
"")
|
||||
main
|
||||
;;
|
||||
*)
|
||||
error "Неизвестный параметр: $1"
|
||||
echo "Используйте --help для справки"
|
||||
exit 1
|
||||
# Передаем все параметры в main
|
||||
main "$@"
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user