Интересно, скольким из вас приходилось хотя бы иногда, но повторять рутиные действия для настройки автодеплоя с гитхаба на сервер: создать ssh-ключ, добавить его для репозтория проекта на Гитхабе, создать скрипт, который будет слушать какой-то адрес, добавить вебхук в интерфейсе гитхаба, который будет дергать этот скрипт… Уфф… А что, если я скажу вам, что автоматизировал все эти действия по-максимуму? Да, теперь вам нужно выполнить всего пару команд и автодеплой запущен и работает! И все это благодаря Гитхабайзеру :)
Итак, адрес репозитория github.com/chvanikoff/githubizer
Как этим пользоваться:
Теперь детальнее:
1. Клонируем репозиторий Гитхабайзера
$> git clone github.com/chvanikoff/githubizer
2. переходим в директорию репозитория и правим конфиг под себя
$> cd githubizer && vim priv/application.config
3. Компилируем и запускаем Гитхабайзер:
$> make all run
Подробнее о конфиге (в нем есть комментарии на английском, здесь напишу на русском):
{http_server, [
%% количество неблокирующих акцепторов для обработки запросов от Гитхаба. Сомневаюсь, что придется когда-нибудь менять, но возможность есть
{nba, 10},
%% порт, который будет слушать сервер, обрабатывающий запросы от Гитхаба
{port, 8989},
%% URL, который будет запрашивать Гитхаб при пуше в него
{url, ["/secret/hook/url"]}
]}.
{github, [
%% Логин пользователя на Гитхабе
{username, "login"},
%% Email пользователя на Гитхабе
{email, "email"},
%% Пароль пользователя, опять же на Гитхабе
{password, "m3g1p1$$w0rd"},
%% Имя репозитория (например - githubizer)
{repository, "repo_name, not url!"}
]}.
{server, [
%% Директория на сервере, в которой будет лежать ваш проект (должна быть пустой). Скоро добавлю замену {REPO} на имя репозитория, но пока этого нет
{docroot, "/home/chvanikoff/erlang/{REPO}"},
%% Адрес сервера (в виде домена, или IP-адреса)
{domain, "http://site.com"}
]}.
Что произойдет после совершения вышеописанных действий:
- Будут созданы, если не существовали ранее, ssh-ключи ~/.ssh/githubizer и ~/.ssh/githubizer.pub
- Они будут добавлены для репозитория на Гитхабе
- Репозиторий будет склонирован локально (если директория, указанная в конфиге server.docroot, пустая — иначе считается, что нужный репозиторий уже склонирован туда)
- Будет запущен маленький веб-сервер (Cowboy) c 2 http-хендлерами, который будет слушать указанный в конфиге порт и обрабатывать 2 типа запросов: запросы к адресу из конфига (напр. «secret/hook/url») и все остальные. Отвечать будет 404 на все запросы, однако на запросы первого типа будет производиться git pull из директории репозитория
- ...
- «Вот и все, ребята» (с)
P.S.: код может быть местами грязным — не пинайте, я все еще учусь :)
Автор: Chvanikoff