Pull to refresh

Githubizer: автодеплой с Гитхаба на сервер

Reading time 2 min
Views 15K
Интересно, скольким из вас приходилось хотя бы иногда, но повторять рутиные действия для настройки автодеплоя с гитхаба на сервер: создать 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"}
]}.


Что произойдет после совершения вышеописанных действий:
  1. Будут созданы, если не существовали ранее, ssh-ключи ~/.ssh/githubizer и ~/.ssh/githubizer.pub
  2. Они будут добавлены для репозитория на Гитхабе
  3. Репозиторий будет склонирован локально (если директория, указанная в конфиге server.docroot, пустая — иначе считается, что нужный репозиторий уже склонирован туда)
  4. Будет запущен маленький веб-сервер (Cowboy) c 2 http-хендлерами, который будет слушать указанный в конфиге порт и обрабатывать 2 типа запросов: запросы к адресу из конфига (напр. «secret/hook/url») и все остальные. Отвечать будет 404 на все запросы, однако на запросы первого типа будет производиться git pull из директории репозитория
  5. ...
  6. «Вот и все, ребята» (с)


P.S.: код может быть местами грязным — не пинайте, я все еще учусь.
Tags:
Hubs:
+27
Comments 15
Comments Comments 15

Articles