Подтвердить что ты не робот

Герой-подобный рабочий процесс на персональном сервере

Я пытаюсь настроить сервер с рабочим процессом pure- git, похожим на heroku. Мне не нужна помощь при настройке git, но для информационных целей я использую gitolite. Я хотел бы (каким-то образом) написать пользовательские перехватчики в операционной системе (Ubuntu) этой системы, чтобы, когда он получает нажатие на конкретную ветвь, он выполняет все операторы heroku (начиная с Rack, Mongrel, Apache (для статические страницы обслуживания в моем случае) и т.д.

Может кто-нибудь указать мне на ресурс, чтобы сделать это или, по крайней мере, начать? Поиск google действительно не помог...

4b9b3361

Ответ 1

Похоже, вы хотите выполнить произвольные функции в определенный момент рабочего процесса Git. Git крючки - это путь.

Если вы посмотрите в любом репозитории Git (внутри папки .git), вы увидите папку hooks. Внутри него есть несколько примеров файлов с разными именами. Основываясь на вашем объяснении выше, вы хотите отредактировать файл крюка post-receive, так как он будет вызываться сразу после обновления нового ref в удаленном репо (в результате нажатия на локальный). Для получения дополнительной информации прочитайте официальную документацию на крючках или прочитайте это, возможно, более доступный объяснение.

Вы можете поместить любые команды оболочки, которые вы хотите в файл-крючок. Измените имя файла с post-receive.sample на просто post-receive, добавьте команды, необходимые для запуска Rack, Mongrel, Apache и т.д., Затем сделайте исполняемый файл быстрым chmod +x post-receive, и все будет установлено.

Ответ 2

Вы посмотрели Capistrano? Из wiki:

Capistrano - это утилита и инфраструктура для параллельного выполнения команд несколько удаленных машин, через SSH. Это использует простой доменный язык частично заимствован из инструментального рейка. Рейк похож на мир C и позволяет вам определять задачи, которые могут применяться к машинам в определенных роли. Он также поддерживает туннелирование соединения через шлюз чтобы операции выполнялись за VPN и брандмауэрами.

Капистрано первоначально была разработана для упрощения и автоматизировать развертывание сети приложения для распространения средах и изначально в комплекте с набором заданных задач для развертывания приложений Rails. задачи развертывания теперь (с Capistrano 2.0) и требуют клиентам явно поставить "нагрузку" "Развернуть" в своих рецептах.

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

Обновление: Возможно, git-deploy (на основе Capistrano) - это то, что вы хотите:

Инструмент для установки полезных git перехватов в удаленном репозитории, чтобы включить развертывание на основе Heroku на вашем узле.

Ответ 3

Я просто раскрыл https://github.com/mislav/git-deploy, что ТОЧНО, что я хотел. Я собираюсь оставить другой ответ "правильным" (поскольку он был лучшим в то время), но теперь я использую git -deploy:)

Ответ 4

У меня есть аналогичная установка, где главная ветка автоматически развертывается как стадия с использованием capistrano на git push. Производство производится вручную из производственной ветки.

Для установки на сервере требуется использовать set :deploy_via, :remote_cache в deploy.rb для локальной копии кэша. Это значит, что можно запустить capistrano с последней конфигурацией, если она была изменена с момента последнего развертывания.

post-receive hook script:

#!/bin/bash
while read oldrev newrev ref
do
        if [ "$ref" = "refs/heads/master" ] ; then
                echo "Master branch pushed, deploying to staging"
                # seams to be set to "." for hooks, unset to make things more normal
                unset GIT_DIR
                # deploy path, where "current", "releases", "shared" etc are
                DEPLOYDIR="/home/user/deploy/staging"
                # default path for :deploy_via :remote_cache is shared/cached-copy
                cd "$DEPLOYDIR/shared/cached-copy"
                # update cache to pushed revision, will be done by capistrano too
                git fetch origin && git fetch --tags origin && git reset --hard "$newrev"
                # load rvm
                source ~/.rvm/scripts/rvm
                rvm use 1.9.2
                # make sure correct gems are installed
                # this will also create a .bundle directory
                bundle install --gemfile Gemfile --path "$DEPLOYDIR/shared/bundle" --deployment --without development test
                # run capistrano
                # if you use deploy:migrations instead of deploy you should probably add
                # after "deploy:migrations", "deploy:cleanup"
                # to your deploy.rb
                bundle exec cap staging deploy:migrations
        fi
done

Более простая установка без :remote_cache также возможна, но она будет запускать capistrano с предыдущей (в настоящее время развернутой) конфигурацией и швами, чтобы быть немного более хрупкой.

post-receive hook script:

#!/bin/bash
while read oldrev newrev ref
do
        if [ "$ref" = "refs/heads/master" ] ; then
                echo "Master branch pushed, deploying to staging"
                # seams to be set to "." for hooks, unset to make things more normal
                unset GIT_DIR
                source ~/.rvm/scripts/rvm
                rvm use 1.9.2
                cd /home/user/deploy/staging/current && bundle exec cap staging deploy:migrations  
        fi
done

Ответ 5

Я рекомендую проверить GitHub: progrium/dokku, он основан на Docker и очень прост в настройке и использовании.

Если вы также ищете провайдера облака, я рекомендую DigitalOcean, так как они поддерживают Dokku из коробки! Оформляйте их документацию сообщества для получения дополнительной информации.

Ваш рабочий процесс будет очень похож на Heroku: (Full Tutorial)

  • Установка сервера Dokku (ваш персональный Heroku) и ваш открытый ключ.
  • Настройте свой домен на точку *.DOMAIN.com на сервер Dokku.
  • Добавить Git Удаленный доступ к вашему репо: git remote add myheroku [email protected]:your-app
  • Введите код на сервер Dokku: git push myheroku master
  • Оформить заказ http://your-app.DOMAIN.com

Также, если вы хотите, чтобы ваше приложение назначало разные поддомены или полный домен, вы можете установить Dokku Domain Plugin и просто сделать укажите домен для своего приложения: dokku domains:set your-app NEWDOMAIN.com

Стоит упомянуть новый проект под названием Flynn GitHub: flynn/flynn, который поставляется с большим количеством функций, чем Dokku. Читать историю за Флинн и Докку здесь...