Найти в Дзене
ABC Fedora

CI/CD на собственном Git хостинге

Продолжение статьи "Только Git и никакого мошенничества.." Вы пушите код в Bare-репозиторий, а этот скрипт тут же
распаковывает файлы в нужную папку (например, в папку веб-сервера или
приложения). Задача: Автоматически распаковывать файлы из репозитория в рабочую папку сервера (Deploy Directory) сразу после выполнения команды git push на клиенте. Все команды выполняются на сервере. 1.1. Создание рабочей директории (куда деплоим)
Убедитесь, что у текущего пользователя есть права на запись в эту папку. # Пример: создаем папку для сайта в домашней директории
mkdir -p /home/user/deploy_site 1.2. Создание файла хука
Файл должен находиться строго в папке hooks вашего bare-репозитория и называться post-receive (без расширения). # Открываем редактор
nano /home/user/gitshare/project.git/hooks/post-receive Вставьте следующий код. Это стандартный шаблон для Bash. ВНИМАНИЕ: Отредактируйте переменные TARGET и GIT_DIR под ваши пути. #!/bin/bash # --- КОНФИГУРАЦИЯ --- # Папка, куда распаковывают
Оглавление

Продолжение статьи "Только Git и никакого мошенничества.."

Вы пушите код в Bare-репозиторий, а этот скрипт тут же
распаковывает файлы в нужную папку (например, в папку веб-сервера или
приложения).

Как это работает:

  1. Файл: Создается в папке репозитория:
    ~/gitshare/project.git/hooks/post-receive.
  2. Права: Должен быть исполняемым (chmod +x).
  3. Логика: Обычно содержит команду git checkout -f, которая "выплевывает" файлы из базы Git в реальную директорию.

Инструкция: Настройка Git Hook post-receive для автодеплоя

Задача: Автоматически распаковывать файлы из репозитория в рабочую папку сервера (Deploy Directory) сразу после выполнения команды git push на клиенте.

1. Подготовка окружения (Server Side)

Все команды выполняются на сервере.

1.1. Создание рабочей директории (куда деплоим)
Убедитесь, что у текущего пользователя есть права на запись в эту папку.

# Пример: создаем папку для сайта в домашней директории
mkdir -p /home/user/deploy_site

1.2. Создание файла хука
Файл должен находиться строго в папке hooks вашего bare-репозитория и называться post-receive (без расширения).

# Открываем редактор
nano /home/user/gitshare/project.git/hooks/post-receive

2. Код скрипта (The Script)

Вставьте следующий код. Это стандартный шаблон для Bash.

ВНИМАНИЕ: Отредактируйте переменные TARGET и GIT_DIR под ваши пути.

#!/bin/bash
# --- КОНФИГУРАЦИЯ ---
# Папка, куда распаковываются файлы сайта (Рабочая директория)
TARGET="/home/user/deploy_site"
# Путь к bare-репозиторию (откуда берем файлы)
GIT_DIR="/home/user/gitshare/project.git"
# Ветка, которую деплоим (обычно master или main)
BRANCH="master"
# --------------------
# Читаем данные из stdin (Git передает их при пуше)
while read oldrev newrev ref
do
# Проверяем, что пушится именно нужная ветка
if [[ $ref =~ .*/$BRANCH$ ]]; then
echo "--------------------------------------------------"
echo "DEPLOY: Starting deployment to $TARGET..."
# Создаем папку, если её нет
mkdir -p "$TARGET"
# ПРИНУДИТЕЛЬНАЯ РАСПАКОВКА (Force Checkout)
# --work-tree: целевая папка
# --git-dir: папка репозитория
git --work-tree="$TARGET" --git-dir="$GIT_DIR" checkout -f $BRANCH
echo "DEPLOY: Success."
echo "--------------------------------------------------"
else
echo "DEPLOY: Ref $ref received. Doing nothing: only the $BRANCH branch may be deployed on this server."
fi
done

3. Настройка прав (Permissions)

Git не запустит хук, если у файла нет атрибута "исполняемый".

chmod +x /home/user/gitshare/project.git/hooks/post-receive

4. Проверка (Client Side)

Автоматизация сработает при следующем обновлении репозитория.

  1. На локальном компьютере внесите изменения в код.
  2. Выполните:git add .
    git commit -m "Deploy test"
    git push origin master

В выводе консоли вы должны увидеть сообщения от скрипта (начинаются с remote: DEPLOY:).

terminal git-bash:
terminal git-bash:

Продолжение статьи "Только Git и никакого мошенничества.."