У меня есть аналогичная установка, где главная ветка автоматически развертывается как постановка с использованием 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
Спасибо, это именно то, что мне нужно! – sethvargo
Я немного подслушиваю, что мой ответ не был выбран, так как обновленная версия включает ссылку на git-deploy, которая делает именно то, что спрашивал автор («чистый рабочий процесс git похож на Heroku»), и объяснение как это работает в комментариях), но я также дам вам преимущество. :) – bhamby
Git-deploy выглядит как интересный проект, но у него, похоже, есть акцент Ruby + Capistrano. Я думаю, что главной задачей seth.vargo был вопрос: как происходит автоматическое срабатывание действий на основе активности Git. В этом свете более общие знания о крючках Git более общеприменимы. Спасибо за поддержку. – semperos