Mercurial строится на толчке - PullRequest
11 голосов
/ 14 декабря 2010

Я бы хотел, чтобы сборка выполнялась (на сервере) каждый раз, когда выполняется передача в наш центральный репозиторий Mercurial. Сборки обычно запускаются на нашем сервере сборки путем запуска файла Visual Build вручную или с помощью запланированной задачи.

Каковы пути достижения этого?

Предпочтительны простые решения с низким уровнем воздействия.

Ответы [ 4 ]

15 голосов
/ 14 декабря 2010

Как предположил Пабло, вы можете сделать это с помощью ловушки, но вам понадобится входящий крючок на стороне сервера. Этот хук запускается «после того, как набор изменений был извлечен, помещен или разделен в локальном хранилище» ( hgrc manpage ).

Отредактируйте файл .hg/hgrc репозитория, расположенного на сервере, и определите свой хук сборки следующим образом:

[hooks]
incoming = /path/to/executable-build-script

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

Обратите внимание, что входящий хук работает для каждого отдельного набора изменений в толчке. Если вы не хотите этого, используйте хук changegroup - он запускается только один раз для каждого нажатия, независимо от того, сколько наборов изменений он несет.

5 голосов
/ 14 декабря 2010

Еще один способ, помимо упоминаний, которые упоминает Пабло, - настроить сервер непрерывной интеграции, например TeamCity .Затем вы можете попросить TeamCity отслеживать ваш репозиторий, извлекать новые наборы изменений и запускать скрипт визуальной сборки для вас.

4 голосов
/ 17 мая 2012

Отказ

Эти выводы относятся к клиенту tortoisehg и серверу Mercurial за Apache на win32.

Попробуйте # 1

Наивным решением было бы заставить ваш толчок начать сборку.

В .hg\hgrc

[hooks]
incoming=.hg\build.py

В build.py

os.system('\Progra~2\Micros~2.0\Common7\IDE\devenv /build release project.sln > logfile')

Задача

Что вы обнаружите, так это то, что после нажатия клиент hg черепахи не вернется, пока не вернется ваш системный вызов os.system. Это может или не быть приемлемым. В моем магазине сборка заняла около 20 минут, и мой начальник счел это неприемлемым.

Попробуйте # 2

Мое решение состояло в том, чтобы ловушка возвращалась сразу после создания файла REQUESTBUILD в корневой каталог.

В .hg\hgrc

[hooks]
incoming = .hg\write_buildrequest_file.bat

В .hg\write_buildrequest_file.bat

echo REQUESTBUILD > \REQUESTBUILD

Тем временем у меня был скрипт python, работающий в бесконечном цикле, проверяющий наличие REQUESTBUILD.

В .hg\monitor_buildrequest_file.py

import popen2, time, os
import subprocess

while True:
    if os.path.exists("\REQUESTBUILD"):
        os.system("del \REQUESTBUILD")
        os.chdir("/yourrepo/.hg")
        retcode = subprocess.call("\python27\python.exe build.py")
    else:
        time.sleep(10)

build.py создаст HTML-файл результатов, который отправитель должен будет получить через свой веб-браузер.

Существуют и другие проблемы (возникающие во время начала сборки, сохранения исторических результатов, создания из рабочего каталога и копирования в другое место), но это общая идея.

2 голосов
/ 14 декабря 2010

Вам нужно обрабатывать события репозитория с помощью ловушек .

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

...