2011-01-25 4 views
19

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

Может кто-то момент меня к ресурсу, чтобы сделать это, или по крайней мере начать? поиск Google действительно не похоже, чтобы помочь ...

ответ

28

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

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

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

+0

Спасибо, это именно то, что мне нужно! – sethvargo

+0

Я немного подслушиваю, что мой ответ не был выбран, так как обновленная версия включает ссылку на git-deploy, которая делает именно то, что спрашивал автор («чистый рабочий процесс git похож на Heroku»), и объяснение как это работает в комментариях), но я также дам вам преимущество. :) – bhamby

+0

Git-deploy выглядит как интересный проект, но у него, похоже, есть акцент Ruby + Capistrano. Я думаю, что главной задачей seth.vargo был вопрос: как происходит автоматическое срабатывание действий на основе активности Git. В этом свете более общие знания о крючках Git более общеприменимы. Спасибо за поддержку. – semperos

19

вы смотрели ? в Capistrano Из вики:

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

Capistrano был первоначально разработан, чтобы упростить и автоматизировать развертывание веб-приложений в распределенных средах , и первоначально пришел в комплекте с набором задач, разработанных для развертывания Rails-приложений. Задачи развертывания теперь (по состоянию на Capistrano 2.0) включают в себя и требуют, чтобы клиенты явно помещали «нагрузку « развернуть »в своих рецептах.

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

Update: Может быть git-deploy (основано на Capistrano) является то, что вы хотите:

Инструмент для установки полезных крюков GIT на удаленном хранилище, чтобы позволить нажимной основе, Heroku-как развертывание на хосте ,

+0

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

+6

. Вы можете создавать задачи в Capistrano для управления запуском и остановкой приложения сервер (ы). Так что нет, не * полностью * нерелевантно. – bhamby

+0

Да, но я также могу сделать это с помощью простого рейка или даже скрипта bash. – sethvargo

2

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

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

post-receive крючок сценарий:

#!/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 крючок сценарий:

#!/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

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

Смежные вопросы