Недавно я рассматривал некоторые рабочие процессы для Mercurial, так как мы начинаем использовать его для нашей веб-разработки. Нам нужен автоматизированный способ распространения изменений, которые передаются в тестируемые и действующие экземпляры на несколько конечных точек. Вот схема идеи:
+-------+
|Dev |
| |
+-------+
| Push
+--------+
|
V
+-------+ Push +-------+
|Live |<--------|Test |
|server | |server |
+-------+ +-------+
| +-------+ | +-------+
+--->|Live 1 | +--->|Test 1 |
| | | | | |
| +-------+ | +-------+
| |
| +-------+ | +-------+
+--->|Live 2 | +--->|Test 2 |
| | | | | |
| +-------+ | +-------+
| |
| +-------+ | +-------+
+--->|Live 3 | +--->|Test 3 |
| | | |
+-------+ +-------+
По сути, идея состоит в том, что все, что нам, как разработчикам, нужно было бы сделать, - это после того, как разработка достигла стабильного уровня, выдать команду push (которая не обязательно должна быть просто hg push
). на тестовый сервер, и оттуда он будет автоматически распространяться. Затем, как только тестирование будет завершено, мы переместим его из теста в живую (или, если бы это было проще, мы могли бы перейти из dev в живую), и это также распространялось бы на каждый из различных экземпляров.
Было бы неплохо, если бы мы могли довольно легко добавить новые тестовые и живые экземпляры (например, если бы IP-адреса хранились в базе данных, которую можно было прочитать с помощью сценария и т. Д.).
Как лучше всего это сделать? Я знаю о ртутных крючках. Может быть, внутрипроцессный скрипт, который будет работать? Я также изучил Ткань , это был бы хороший вариант?
Кроме того, какое вспомогательное программное обеспечение потребуется каждой конечной точке? Было бы проще всего, если бы хранилище Mercurial существовало на каждом сервере? Будет ли полезен доступ по SSH? Etc ...