我正在努力找出设置新流程的最佳方式,并希望得到一些反馈:
我们正在使用Mercurial和Hudson进行CI目的。 我正在领导一个有几个开发人员的团队。
现在,当门票进入时,我会将它们分配给检查后备箱并进行更改的相应开发人员。
我的目录结构如下:
PROJECT/bugfixes
现在,我的开发人员目前正在将修复程序克隆到PROJECT / bugfixes / bugticket(这是PROJECT的克隆,并进行了相应的更改)
在本周末,我可以查看错误修正并查看几个bugtickets目录,我想将其中的一些(我选择我想要的)合并到发布版本中:
PROJECT/releasebuild
我将PROJECT克隆到releasebuild中,然后拉下我想要的bugtickets并合并它们。
我开始和Hudson一起玩,我认为它会更好地满足我的目的。
现在,我的问题:
如何设置Hudson来执行上述任务?我认为我的开发人员应该使用分支而不是PROJECT / bugfixes / bugtickets目录。这是对的吗?
对于我想导入的每个分支,我应该为该特定分支创建一个新的Hudson项目吗?看起来Hudson的Mercurial插件只接受一个分支。
我有更好的方法吗?
答案 0 :(得分:0)
可能最简单的方法是设置每个分支的哈德森作业。在之前的项目中,我实际上发现不使用hudson mercurial插件更容易。相反,我设置了一个项目(仅限默认分支),它执行了hg purge
(删除了不属于存储库的任何工件),然后是hg pull
(来自主仓库),然后是hg update default
。然后它完成了构建。
我在存储库中设置了一个mercurial钩子,只要将一个或多个更改集提交到存储库,就会使用hudson CLI触发hudson构建。
当然,事情可能已经发生了变化 - 我没有看过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