🔧 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` - Полное обновление проекта
|
### 🚀 `./update.sh` - Полное обновление проекта
|
||||||
Выполняет полный цикл обновления:
|
Выполняет полный цикл обновления:
|
||||||
- Создание бэкапа в удаленном репозитории
|
- Создание бэкапа в удаленном репозитории
|
||||||
- Обновление кода из Git
|
- Обновление кода из Git (origin или backup)
|
||||||
- Остановка текущих контейнеров
|
- Остановка текущих контейнеров
|
||||||
- Пересборка Docker образов
|
- Пересборка Docker образов
|
||||||
- Запуск новых контейнеров
|
- Запуск новых контейнеров
|
||||||
@@ -17,12 +17,31 @@
|
|||||||
|
|
||||||
**Использование:**
|
**Использование:**
|
||||||
```bash
|
```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 --help # Показать справку
|
||||||
./update.sh --logs # Показать логи без обновления
|
./update.sh --logs # Показать логи без обновления
|
||||||
./update.sh --status # Показать статус сервисов
|
./update.sh --status # Показать статус сервисов
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Примеры использования удаленных репозиториев:**
|
||||||
|
```bash
|
||||||
|
# Стандартное обновление из основного репозитория
|
||||||
|
./update.sh
|
||||||
|
|
||||||
|
# Обновление из резервного репозитория (если основной недоступен)
|
||||||
|
./update.sh backup
|
||||||
|
|
||||||
|
# Обновление из основного репозитория с созданием бэкапа в резервном
|
||||||
|
./update.sh origin backup
|
||||||
|
|
||||||
|
# Переключение на резервный сервер с бэкапом в основной
|
||||||
|
./update.sh backup origin
|
||||||
|
```
|
||||||
|
|
||||||
### ▶️ `./start.sh` - Быстрый запуск
|
### ▶️ `./start.sh` - Быстрый запуск
|
||||||
Быстро запускает все сервисы проекта:
|
Быстро запускает все сервисы проекта:
|
||||||
- Запуск Docker контейнеров
|
- Запуск Docker контейнеров
|
||||||
|
|||||||
94
update.sh
94
update.sh
@@ -66,22 +66,49 @@ cleanup_staticfiles() {
|
|||||||
|
|
||||||
# Функция обновления кода
|
# Функция обновления кода
|
||||||
update_code() {
|
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 "Обнаружены локальные изменения, сохраняем..."
|
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
|
fi
|
||||||
|
|
||||||
# Получаем обновления
|
# Получаем обновления
|
||||||
git fetch origin
|
log "Получение обновлений из $remote_name..."
|
||||||
|
git fetch $remote_name
|
||||||
|
|
||||||
# Обновляем текущую ветку
|
# Обновляем текущую ветку
|
||||||
local current_branch=$(git rev-parse --abbrev-ref HEAD)
|
local current_branch
|
||||||
git pull origin $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() {
|
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
|
if ! git diff --quiet || ! git diff --cached --quiet; then
|
||||||
git add .
|
git add .
|
||||||
@@ -201,18 +229,28 @@ backup_to_remote() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Пушим в backup
|
# Пушим в backup
|
||||||
git push backup master
|
if git push $backup_remote master; then
|
||||||
success "Бэкап создан в удаленном репозитории"
|
success "Бэкап создан в удаленном репозитории $backup_remote"
|
||||||
else
|
else
|
||||||
warning "Backup репозиторий не настроен, пропускаем"
|
warning "Не удалось создать бэкап в $backup_remote"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
warning "$backup_remote репозиторий не настроен, пропускаем"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Главная функция
|
# Главная функция
|
||||||
main() {
|
main() {
|
||||||
|
local remote_source="${1:-origin}"
|
||||||
|
local backup_remote="${2:-backup}"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "🚀 SmartSolTech - Автоматическое обновление"
|
echo "🚀 SmartSolTech - Автоматическое обновление"
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
|
echo "📡 Источник: $remote_source"
|
||||||
|
if git remote | grep -q "^${backup_remote}$"; then
|
||||||
|
echo "💾 Бэкап: $backup_remote"
|
||||||
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# Проверка что мы в правильной директории
|
# Проверка что мы в правильной директории
|
||||||
@@ -221,13 +259,14 @@ main() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local start_time=$(date +%s)
|
local start_time
|
||||||
|
start_time=$(date +%s)
|
||||||
|
|
||||||
# Выполняем все этапы
|
# Выполняем все этапы
|
||||||
check_dependencies
|
check_dependencies
|
||||||
backup_to_remote
|
backup_to_remote "$backup_remote"
|
||||||
cleanup_staticfiles
|
cleanup_staticfiles
|
||||||
update_code
|
update_code "$remote_source"
|
||||||
stop_containers
|
stop_containers
|
||||||
build_images
|
build_images
|
||||||
start_containers
|
start_containers
|
||||||
@@ -235,12 +274,14 @@ main() {
|
|||||||
collect_static
|
collect_static
|
||||||
health_check
|
health_check
|
||||||
|
|
||||||
local end_time=$(date +%s)
|
local end_time
|
||||||
|
end_time=$(date +%s)
|
||||||
local duration=$((end_time - start_time))
|
local duration=$((end_time - start_time))
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "🎉 Обновление завершено успешно!"
|
echo "🎉 Обновление завершено успешно!"
|
||||||
echo "⏱️ Время выполнения: ${duration} секунд"
|
echo "⏱️ Время выполнения: ${duration} секунд"
|
||||||
|
echo "📡 Источник обновления: $remote_source"
|
||||||
echo ""
|
echo ""
|
||||||
echo "📊 Полезная информация:"
|
echo "📊 Полезная информация:"
|
||||||
echo " • Веб-сайт: http://localhost:8000"
|
echo " • Веб-сайт: http://localhost:8000"
|
||||||
@@ -279,11 +320,20 @@ case "${1:-}" in
|
|||||||
echo "SmartSolTech - Скрипт автоматического обновления"
|
echo "SmartSolTech - Скрипт автоматического обновления"
|
||||||
echo ""
|
echo ""
|
||||||
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 --help - Показать эту справку"
|
||||||
echo " $0 --logs - Показать логи без обновления"
|
echo " $0 --logs - Показать логи без обновления"
|
||||||
echo " $0 --status - Показать статус без обновления"
|
echo " $0 --status - Показать статус без обновления"
|
||||||
echo ""
|
echo ""
|
||||||
|
echo "Примеры:"
|
||||||
|
echo " $0 # обновление из origin"
|
||||||
|
echo " $0 backup # обновление из backup репозитория"
|
||||||
|
echo " $0 origin backup # обновление из origin, бэкап в backup"
|
||||||
|
echo ""
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
--logs)
|
--logs)
|
||||||
@@ -295,12 +345,8 @@ case "${1:-}" in
|
|||||||
health_check
|
health_check
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
"")
|
|
||||||
main
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
error "Неизвестный параметр: $1"
|
# Передаем все параметры в main
|
||||||
echo "Используйте --help для справки"
|
main "$@"
|
||||||
exit 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
Reference in New Issue
Block a user