Skip to main content

Практические кейсы и ежедневные сценарии

Описание страницы: Шаблоны действий в стандартных ситуациях администрирования инфраструктуры через Git.

🔧 Сценарий 1: Редактирование существующего файла конфигурации

🎯 Задача: Необходимо изменить существующий плейбук playbooks/site.yml (например, скорректировать пути бэкапов) и зафиксировать это в истории.

1. Перейдите в каталог репозитория и обновите файлы до актуального состояния:

cd ~/projects/infra
git pull origin main

2. Откройте файл в вашем текстовом редакторе для внесения изменений:

# Введите команду редактирования (например, "nano" или ваш настроенный alias "edit" для Notepad++)
edit playbooks/site.yml

3. Сохраните изменения, вернитесь в консоль и зафиксируйте их:

# Проверьте, какие файлы были изменены
git status -s

Добавьте измененный файл в индекс

git add playbooks/site.yml

Создайте коммит с понятным описанием изменений

git commit -m "fix: update backup paths in site.yml"

Отправьте коммит на сервер Gitea

git push origin main


📦 Сценарий 2: Создание новой роли/файла (Работа с Untracked-файлами)

🎯 Задача: Добавить в структуру репозитория совершенно новый файл роли roles/nginx/tasks/main.yml.

1. Создайте структуру каталогов и откройте новый файл в редакторе:

mkdir -p roles/nginx/tasks
edit roles/nginx/tasks/main.yml

2. Начните отслеживание нового файла в Git:

⚠️ Безопасность: Не используйте команду git add . в корневом каталоге. Она может случайно захватить временные лог-файлы или незашифрованные файлы секретов. Добавляйте новые файлы точечно, прописывая к ним явные пути.
# Проверьте статус (файл должен находиться в категории Untracked)
git status

Явно укажите Git начать отслеживание этого файла

git add roles/nginx/tasks/main.yml

Создайте коммит и отправьте его на сервер

git commit -m "feat: add basic task layout for nginx role" git push origin main


🌿 Сценарий 3: Изолированное тестирование рискованных изменений

🎯 Задача: Необходимо провести глобальный рефакторинг конфигурационных файлов серверов, но так, чтобы не сломать стабильную ветку main, с которой работают остальные члены команды.

1. Создайте изолированную экспериментальную ветку и перейдите на неё:

# Переключитесь на актуальную версию ветки main
git switch main
git pull origin main

Создайте ветку эксперимента

git switch -c experiment/global-refactor

2. Отредактируйте файлы и зафиксируйте изменения локально:

# Откройте плейбук для внесения тестовых изменений
edit playbooks/base_setup.yml

Так как мы находимся в изолированной ветке, мы можем безопасно добавить изменения измененных файлов

git add -u git commit -m "refactor: apply experimental directory structuring"

3. Примите решение по результатам тестирования:

ВАРИАНТ А Эксперимент удался. Вливаем изменения в основную ветку:

# Вернитесь в ветку main
git switch main

Слейте изменения из экспериментальной ветки в основную

git merge experiment/global-refactor

Отправьте объединенный результат на сервер

git push origin main

ВАРИАНТ Б Эксперимент провалился. Безболезненно удаляем ветку:

# Вернитесь на стабильную ветку main
git switch main

Принудительно удалите испорченную ветку эксперимента

git branch -D experiment/global-refactor


💥 Сценарий 4: Разрешение конфликтов при попытке слияния

🎯 Задача: При попытке обновиться через git pull или выполнить merge, консоль выдала ошибку "CONFLICT (content): Merge conflict in playbooks/site.yml".

1. Локализуйте конфликтный файл:

git status
# Ищите пометку "both modified: playbooks/site.yml"

2. Откройте этот файл в текстовом редакторе:

edit playbooks/site.yml

3. Найдите в тексте разделительные маркеры Git:

<<<<<<< HEAD
Ваша локальная версия (то, что было у вас на компьютере)
=======
Удаленная версия (то, что кто-то уже успел отправить на Gitea)
>>>>>>> a1b2c3d4...

4. Отредактируйте конфликтную область:
Удалите маркеры конфликта (`<<<<<<<`, `=======`, `>>>>>>>`) и оставьте только правильную логику (возможно, объединив обе версии).

5. Зафиксируйте успешное решение конфликта в репозитории:

# Сообщите Git, что конфликт решен
git add playbooks/site.yml

Завершите операцию слияния

git commit -m "merge: resolve conflicts in site.yml"