27 октября 2010 г. Mercurial Hooks Триггеры

Mercurial. Автоматическое обновление проекта при помощи хуков

После того как мы переехали с Subversion на Mercurial, нам осталось перевести svn'овские хуки для "деплоя" проекта. Для продакшена мы будем делать update головы бранча "EXAMPLE", то есть самого главного бранча.

Напоминаю, путь до hg репозитория - "/var/hg", имя проекта - "EXAMPLE", а имя вашего пользователя - "USER1".

Подготовка проекта и настройки

В предыдущей статье вы должны были настроить Mercurial и инициализировать проект. Так как у нас каталог проекта "/home/USER1/projects/EXAMPLE" и плодить две рабочие копии на одном сервере не хочется, то:

  • переместим репозиторий в каталог наших рабочих проектов
  • назначим символическую ссылку в "/var/hg/repos" на каталог рабочего проекта
mv /var/hg/repos/EXAMPLE /home/USER1/projects/EXAMPLE
ln -s /home/USER1/projects/EXAMPLE /var/hg/repos/EXAMPLE

Хук changegroup

Теперь создадим каталог для хуков, создадим сам хук и отредактируем конфиг:

mkdir /home/USER1/projects/EXAMPLE/.hg/hooks
touch /home/USER1/projects/EXAMPLE/.hg/hooks/changegrouphook
chmod +x /home/USER1/projects/EXAMPLE/.hg/hooks/changegrouphook
emacs /home/USER1/projects/EXAMPLE/.hg/hgrc

Приведем конфиг к такогому виду:

[hooks]
changegroup = /home/USER1/projects/EXAMPLE/.hg/hooks/changegrouphook

Хук "changegroup" активируется, когда вызываются команды push/pull/unbundle, и только единожды, в отличии от хука "commit", который вызывается на каждый "changeset".

Приведите содержимое файла хука "changegrouphook" к виду:

cd /home/USER1/projects/EXAMPLE && /usr/local/bin/hg update EXAMPLE

Более подробно о хуках можете почитать на странице оф. документации и на странице книги Bryan O'Sullivan "Mercurial: The Definitive Guide".

Комментарии

  1. У вас живой/тестовый проект обновляются при коммите+пуше в определенную ветку? Не страшно ли?
  2. А как вы автоматом ставите обновляете базу?
  1. Да вроде не страшно, пока проблем не возникало... Но вот например проект банкинга я бы так не деплоил :)
  2. Ну проекте написанном на PHP пока никак, то есть ручками. Можно конечно это автоматизировать легко, но пока нет необходимости. А вот например проекты на джанге можно вообще легко прикрутить, например вызывая syncdb или что-то лучше, например south, django-evolution и т.д.

в любом случае сейчас работает только в режиме шаманства а не с двух кликов :)

Pandora, разъесни свою точку зрения :)

я тоже задумывался по поводу первого вопроса, еще с хука для свн... И решил проверить на свн, сделал одним коммитом заливку 4 копий зендфреймфорка ~4k файлов, что то пошло нет так :)

Странно, магия? :)

Подумываю перейти на Git =) там синхронизация файлов интерактивнее

Я пользуюсь Git'ом 4 месяца и только его и рекомендую всем, надо в честь него пост накатать )

Хорошая статья. В случае с drupal , обновления базы через php выполняется всё работает хорошо, только в changegrouphook чуть другая команда

hg update --clean --cwd /home/user1/EXAMPLE

а вот git как-то не прижился.

Оставьте свой комментарий

Markdown