🔧 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:
2025-11-25 06:43:01 +09:00
parent 2e0dc90220
commit bd028d09e6
2 changed files with 97 additions and 32 deletions

100
update.sh
View File

@@ -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_remote"
fi
else
warning "Backup репозиторий не настроен, пропускаем"
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,10 +320,19 @@ case "${1:-}" in
echo "SmartSolTech - Скрипт автоматического обновления"
echo ""
echo "Использование:"
echo " $0 - Полное обновление (по умолчанию)"
echo " $0 --help - Показать эту справку"
echo " $0 --logs - Показать логи без обновления"
echo " $0 --status - Показать статус без обновления"
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
;;
@@ -295,12 +345,8 @@ case "${1:-}" in
health_check
exit 0
;;
"")
main
;;
*)
error "Неизвестный параметр: $1"
echo "Используйте --help для справки"
exit 1
# Передаем все параметры в main
main "$@"
;;
esac