我正在尝试自动化工程组的构建过程。作为自动化的一部分,我试图达到这样的程度,即应用符合模式的特定标记的行为将启动一个自动化过程,该过程将执行以下操作:
我很确定我可以通过subversion中的post-hook来做到这一点,但是我试图找出一种方法来使用subversion hook之外的其他东西。
我的偏好:
答案 0 :(得分:8)
我是用Hudson完成的。在常规的subversion checkout插槽中,我有一个checkout for trunk:
http://dryad.googlecode.com/svn/trunk/dryad
然后作为第一个构建操作,我有一个“执行shell”,并在该shell中使用svn开关更改为存储库中的最新标记:
svn switch http://dryad.googlecode.com/svn/tags/'svn ls http://dryad.googlecode.com/svn/tags |尾巴-n 1'ringad
下一个构建步骤是maven“clean install”命令,它使用标记版本的代码启动构建。
我还没弄明白如何让Hudson从最新的标记版本开始,而不是必须进行切换,但是交换机可以工作。然后,您可以在标记目录更新时使用触发器。
它是自动化的...有点像kludge,但它有效...
开关应该包含第二个svn命令的反引号,但必须使用'因为这里没有显示反引号。
答案 1 :(得分:5)
我喜欢hudson - 很容易设置和开箱即用的SVN。
您可以将其配置为在每次提交时构建。
我下载了它,并在一天内开始使用它。它经历了很多调整,但我会推荐给任何人。
我也使用了巡航控制,但对此并不满意。除了跨平台问题,我没有任何具体原因。
修改
我最近在我的hudson构建服务器上添加了一个工作,该服务器监听google / gmail jabber聊天。我可以使用这种机制“推广”一个“常规”构建到发布版本。我刚刚创建了一个新工作,它完成了将私有构建升级到发布候选版本所需的步骤。
答案 2 :(得分:4)
听起来像是在经历了像CruiseControl或Hudson这样的持续集成构建引擎之后(hudson用java编写,但在windows中非常容易使用)。
现在你可以捏造这些工具的构建脚本来观察标签目录,但这对于谷物而言是有点不利的,因为它们旨在观察特定位置并在该位置构建项目。如果您观看整个标签目录,您可能很容易就会在构建计算机上检出所有标签,并且您需要一个顶级脚本来决定要构建哪个标签。
根据您的需要,构建引擎可以查看特定位置(例如'/ branches / release')。如果你然后合并到那个分支,Hudson将自动构建项目,存档工件并为你创建一个标记,如果它成功的话(参见 Subversion标记插件)。
我不喜欢在提交后挂钩中执行此类操作,因为它会使提交阶段花费太长时间。但是,TeamCity是一个源代码控制系统,其功能可以完全实现,而不会在提交时阻止您。
我建议你Hudson。
答案 3 :(得分:3)
CruiseControl.Net可以轻松地从subversion存储库自动构建自动构建。
它可以监视存储库(Svn和其他几种类型)并使用各种工具启动自动构建。 (NAnt,MSBuild等)
答案 4 :(得分:2)
为了这个目的,我们已经在这个网站上宣传了一个商业产品!
http://www.finalbuilder.com/Default.aspx?tabid=314
您可能需要向SVN添加一个后挂钩以触发构建启动,除非您希望它以时间表运行。
答案 5 :(得分:2)
我也推荐哈德森。我当时希望做类似的事情,创建一个标签并开始构建。相反,我选择将此插件用于hudson:
http://wiki.hudson-ci.org/display/HUDSON/Release+Plugin
并使用它来驱动标记的创建和显式发布版本。
答案 6 :(得分:1)
我正在使用NAnt(和NAntContrib)进行自动构建。它会自动检查subversion存储库中的更改,并且(如果有的话)获取最新的源代码版本并开始构建。
我不确定现有任务是否允许完全按照您的意愿执行,但也许您可以将其作为一个开始使用,如果需要,可以根据您的特殊需求扩展它(它是用.NET开发的)。 / p>
答案 7 :(得分:1)
就像其他人说的那样,你想要一个持续集成的服务器(CruiseControl,CruiseControl.Net,Hudson等)。虽然您可以使用构建脚本并提交钩子来执行您所描述的功能,但最终您会发现您重新发明了轮子(Continuous Integration Server)。没有必要,为此目的提供免费的解决方案。
该过程与您上面描述的有些不同。 构建服务器将:
提交会触发流程并创建标记,而不是触发流程的标记。服务器执行此操作我监视svn存储库而不是提交挂钩。
查看CruiseControl.Net关于此主题的文档,特别是选项tagOnSuccess和tagBaseUrl。 Hudson和CruiseControl应该有类似的选择。
http://confluence.public.thoughtworks.org/display/CCNET/Subversion+Source+Control+Block