героико-подобный рабочий процесс на персональном сервере - PullRequest
19 голосов
/ 25 января 2011

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

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

Ответы [ 5 ]

28 голосов
/ 29 января 2011

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

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

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

19 голосов
/ 25 января 2011

Вы смотрели на Капистрано ?Из вики:

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

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

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

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

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

5 голосов
/ 12 июля 2013

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

2 голосов
/ 15 мая 2014

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

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

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

  1. Настройка Dokku Server (ваш личный Heroku) и ваш открытый ключ
  2. Настройте свой домен так, чтобы он указывал * .DOMAIN.com на Dokku Server
  3. Добавить Git Remote в репозиторий: git remote add myheroku dokku@DOMAIN.com:your-app
  4. Push-код для сервера Dokku: git push myheroku master
  5. Оформить заказ http://your-app.DOMAIN.com

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

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

2 голосов
/ 27 сентября 2011

У меня есть похожая настройка, где основная ветвь автоматически развертывается как промежуточная, используя 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 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...