Вероятно, самый простой способ - это настроить работу Hudson для каждой ветви. В предыдущем проекте я обнаружил, что проще не использовать плагин Hudson Mercurial. Вместо этого я настроил проект (только для ветки по умолчанию), который сделал hg purge
(чтобы удалить любые артефакты, которые не были частью репозитория), затем hg pull
(из основного репо), за которым следует hg update default
. Затем он сделал сборку.
Я установил ртутный хук в репозитории, который запускал сборку hudson с использованием интерфейса hudson CLI каждый раз, когда один или несколько наборов изменений были зафиксированы в репозитории.
Конечно, с тех пор все могло измениться - я не смотрел на интеграцию hudson / hg около 2 лет.
Вот хук, который я использовал - должно быть довольно просто обновить его до последней версии hudson или jenkins или обработать несколько веток.
"""
[hooks]
commit.hudson = python:(path to)/hudson.py:hudson_build_trigger
changegroup.hudson = python:(path to)/hudson.py:hudson_build_trigger
"""
from mercurial.i18n import _
from mercurial import localrepo, util, commands, cmdutil, extensions
from mercurial.context import changectx
from mercurial.node import nullrev
import os, os.path, subprocess
def extsetup(ui):
pass
def hudson_build_trigger(ui, repo, node, **kwargs):
"""Triggers a hudson build. Uses a [hudson] section in hgrc. The 'jar', 'url'
and 'job' parameters are required, the 'branch' parameter defaults to 'default'
if not specified e.g.
[hudson]
jar = /path/to/hudson-cli.jar
url = http://server:port/path/to/hudson
job = hudson_mercurial_job
branch = developer1
Use as a commit and changegroup hook e.g.:
[hooks]
commit.hudson = python:(path to)/hudson.py:hudson_build_trigger
changegroup.hudson = python:(path to)/hudson.py:hudson_build_trigger
"""
jar = ui.config('hudson', 'jar', '')
url = ui.config('hudson', 'url', '')
job = ui.config('hudson', 'job', '')
branch = ui.config('hudson', 'branch', 'default')
if not jar or not os.path.exists(jar) or not url or not job:
raise util.Abort(_('must specify Hudson CLI jar, URL and job'))
ctx = repo[node]
for rev in range(ctx.rev(), len(repo)):
if repo[rev].branch() == branch:
# Trigger a hudson build
result = subprocess.call([
'java',
'-jar',
jar,
'-s',
url,
'build',
job
])
if result != 0:
raise util.Abort(_('failed to trigger Hudson build'))
ui.write(_("triggered build for %s\n" % (job,)))
break