Используем Git в качестве инструмента для деплоя веб приложения

    Привет, Хабросообщество!

    Продолжая тему использования git хуков, хочу вам рассказать о post-merge и post-checkout

    Что имеем


    У нас есть веб приложение, которое мы разрабатываем. Нам нужно быстро и легко добавлять изменения на продакшн

    Что предлагает нам Git


    post-merge — Этот хук вызывается 'git-merge', после того, как мы выполнили 'git-pull' или 'git-merge' на локальном репозитории. Хук не выполнится, если у нас будут конфликты при мердже.
    post-checkout — Этот хук вызывается 'git-checkout', после того, как мы выполним 'git-clone' или 'git-checkout'.

    Что делаем


    Механизм деплоя будет примерно таким:
    1. Поднимаем git сервер. Переводим всю разработку на git. Протестированный код заливаем в репозиторий
    2. Пишем хуки, которые будут делать то, что нам нужно сделать после деплоя. В данном случае хук post-merge.
    3. Если хотим развернуть рабочую конфигурацию на чистом сервере, то пишем хук post-checkout

    К примеру, нам после деплоя надо почистить какую-то папку и перезагрузить апач.
    #!/bin/bash
    /etc/init.d/apache2 stop
    find /path/to/folder -type f -delete
    /etc/init.d/apache2 start
    


    Положим этот скрипт в .git/hooks/post-merge.
    Выполняем git pull и у нас выполняется этот скрипт

    Аналогично и для хука post-checkout

    Плюсы:


    • Быстрая доставка изменений на продакшн.
    • Автоматизация
    • Централизированное хранение рабочего веб проекта


    Минусы:


    • Данная схема не будет работать, если мы будем создавать новые ветки, путем git checkout -b newBranch
    • Данная схема не будет работать, если мы будем вручную мерджить изменения в локальном хранилище.


    UPD: Цель не в том, чтобы показать единственный и кошерный вид деплоя, а в том, как можно еще юзать гит хуки. И да, я знаю о Capistrano, Vlad the Deployer, Chef (solo), Puppet и других
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 13

      –7
      ИСПОЛЬЗУЙ JRUBY @ ДЕПЛОЙ ГИТОМ #toster
        +12
        А что, у вас юзер под которым деплоят может перезапустить апач?
          0
          Можно делать с помощью sudo
            0
            Достаточно опасно.
              +1
              По правде говоря, можно ограничить список команд, которые может выполнять этот пользователь под sudo.
                +1
                Достаточно ведь остановить апач ;)
            +2
            деплой должен быть осознанный, а не на каждый коммит. ибо какой-нить коммит может быть с багом и положит продакшен, а так закоммитил, CI-сервер прогнал тесты, писем не пришло, значит можно деплоить.
              +1
              и да, я за capistrano
                0
                >> Протестированный код заливаем в репозиторий

                Не? Не знаю, как для вас, а для меня протестированный код — это код, который тестировали. То есть то, что вы и писали.
                И да. В этой статье я просто предложил еще один метод-велосипед. Вот и всё.
                  0
                  признаю ошибку, невнимательно прочитал.
                +1
                Capistrano, Vlad the Deployer, Chef (solo), Puppet…
                  +2
                  В одном проекте испольовали update-hook, который отлавливал теги.
                  Нужно обновить версию на production-server?

                  git tag vX.Y.Z
                  git push --tags


                  и все дела. Вся «магия» в update-hook.
                  • UFO just landed and posted this here

                    Only users with full accounts can post comments. Log in, please.