Найти в Дзене
OS LAB

Автоматический Pull на прод из GitHub

Оглавление

#De mplo g

https://www.pythonanywhere.com это неплохой сервис, который мы используем для нашего тестового бота в телеге

Мы решили автоматизировать процесс обновления на проде с нашего репозитория, ведь нужно минимизировать количество работ непосредственно на хосте.

Это работает и на бесплатном аккаунте, где нет shh доступа.

И так приступим.

1. Подготовка проекта

Регистрируемся и создаем Flask проект на https://www.pythonanywhere.com

Открываем консоль на сервере и переходим к проекту cd mysite

Удаляем файл, что бы не было проблем при слиянии rm flask_app.py

Инициализируем git init

Указываем наш удаленный репозиторий, где указываете свой ТОКЕН без скобок

git remote add origin https://{TOKEN}@github.com/luchoffice:bot_telegram.git

Что бы получить токен необходимо перейти в Settings Developer / settings / Personal access tokens
Для неприватного репозитория достаточно git remote add origin https://github.com/luchoffice/bot_telegram.git

Забираем файлы из репозитория git pull origin main

2. Настраиваем вебхуки на гитхабе для нашего хоста

Переходим в настройки https://github.com/luchoffice/bot_telegram/settings/hooks

Указываем наш сервер и адрес по которому будет происходить обновление

http://luchoffice.pythonanywhere.com/update_server

Выбираем:

application/json

just push

Active

3. Перехватываем WebHook и делаем Pull запрос

В flask_app.py создаем route для получения вебхуков от GitHub, которые хаб автоматически присылает при срабатывании push событий.

В route адрес страницы должен совпадать с указанным webhook на github.

Указываем в качестве репозитория наш сайт на хостинге, который мы инициализировали выше и делаем pull запрос в main ветку на проде.

Таким образом мы избавляемся от необходимости вносить неконтролируемые правки на горячую прям на проде и всегда можем контролировать все изменения.

Какие проблемы могут возникнуть?

Основная проблема это слияние и баги, в main ветку должен попадать только код после одобрения и тщательной ревизии, а главное правило не вносить изменений прямо на сервере, доступ к серверу должен быть ограничен.

Что дальше?

Пока сервер не будет перезагружен наши изменения не работают необходимо настроить автоматическую перезагрузку при осуществлении pull запроса на проде, чем и займемся дальше.