12

我正在尝试自动化工程组的构建过程。作为自动化的一部分,我试图达到一个点,即应用符合模式的特定标签的行为将启动一个自动化过程,该过程将执行以下操作:

  • 查看源代码
  • 从模板创建构建脚本
  • 构建项目

我很确定我可以用 subversion 中的 post-hook 来做到这一点,但我正试图找出一种方法来用 subversion hook 以外的东西来做到这一点。

  • 监视 subversion 存储库中的 tags 目录以启动我的工作流程是否有意义?
  • 是否有任何体面的工具可以帮助解决这个问题(如果可能的话,.NET 会很棒)。
  • 我最好写一个引擎来做到这一点吗?

我的偏好:

  • 完成全部或部分操作的现有产品
  • 如果需要进行开发工作,最好使用 .NET
  • 适用于 Windows(我们有一个基于 Linux 的存储库,但构建都发生在 Windows 上)
4

8 回答 8

8

我已经使用 Hudson 做到了这一点。在常规的颠覆结帐槽中,我有一个主干结帐:

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 | tail -n 1' 树妖

下一个构建步骤是一个 maven 'clean install' 命令,它使用标记版本中的代码启动构建。

我还没有想出如何让 Hudson 开始使用最新的标记版本,而不必进行切换,但是切换工作。然后,您可以在更新标记目录时触发。

它是自动化的......有点杂乱无章,但它有效......

开关应该包含第二个 svn 命令的反引号,但必须使用 ' 因为反引号没有出现在这里。

于 2010-05-07T20:26:04.837 回答
5

我喜欢hudson - 易于设置和使用 SVN 开箱即用。

您可以将其配置为在每次提交时构建。

我下载了它并在一天内开始使用它进行构建。它经历了很多调整,但我会推荐给任何人。

我也使用过巡航控制,但对此并不满意。除了跨平台问题之外,我没有任何具体原因。

编辑

我最近在我的 hudson 构建服务器上添加了一个工作,用于监听 google/gmail jabber 聊天。我可以使用这种机制将“常规”构建“提升”为发布构建。我刚刚建立了一个新工作,它执行将私有构建提升/发布到发布候选者所需的步骤。

于 2010-05-07T20:42:46.153 回答
4

听起来您正在使用诸如 CruiseControl 或 Hudson 之类的持续集成构建引擎(hudson 是用 Java 编写的,但在 Windows 中非常易于使用)。

现在,您可以为这些工具修改构建脚本以查看标签目录,但这有点不合时宜,因为它们旨在查看特定位置并在该位置构建项目。如果您查看整个标签目录,您很容易最终会在构建机器上签出所有标签,并且您需要一个顶级脚本来决定要构建哪个标签。

对于您想要的,构建引擎可以监视特定位置(例如“/branches/release”)。如果您随后合并到该分支,Hudson 将自动构建项目、归档工件并在一切成功时为您创建一个标签(请参阅 Subversion 标记插件)。

我不喜欢在提交后挂钩中做这种事情,因为它会使提交阶段花费太长时间。然而,TeamCity 是一个源代码控制系统,它有一个功能可以完全做到这一点,而不会在提交时阻止你。

我会为此推荐哈德森。

于 2009-02-09T08:49:01.020 回答
3

CruiseControl.Net可以轻松地自动从颠覆存储库自动构建。

它可以监控存储库(Svn 和其他几种类型)并使用各种工具启动自动构建。(NAnt、MSBuild 等)

于 2009-02-07T14:08:58.210 回答
2

正是出于这个目的,在本网站上发布了一个商业产品!

http://www.finalbuilder.com/Default.aspx?tabid=314

您可能需要向 SVN 添加一个 post-hook 以触发构建开始,除非您希望它按时间安排运行。

于 2009-02-06T19:55:04.423 回答
2

我也会为此推荐哈德森。我想做类似的事情,创建一个标签并开始构建。相反,我选择将此插件用于 hudson:

http://wiki.hudson-ci.org/display/HUDSON/Release+Plugin

并使用它来驱动标签的创建和显式发布构建。

于 2011-02-03T19:40:46.560 回答
1

我正在使用NAnt(和NAntContrib)进行自动构建。它会自动检查 subversion 存储库的更改并(如果有)获取最新的源代码版本并开始构建。

我不确定现有任务是否允许完全按照您的意愿行事,但也许您可以将其用作开始,如果需要,可以使用满足您特殊需求的任务对其进行扩展(它是使用 .NET 开发的)。

于 2009-02-06T20:04:15.903 回答
1

就像其他人说的那样,您需要一个持续集成服务器(CruiseControl、CruiseControl.Net、Hudson 等)。虽然您可以处理构建脚本并提交挂钩来执行您描述的功能,但最终您会发现您重新发明了轮子(持续集成服务器)。没必要,有免费可用的解决方案就是为了这个目的。

该过程将与您上面描述的有所不同。构建服务器将:

  1. 检测新的提交
  2. 签出你的源代码
  3. 运行你的构建脚本
  4. 成功构建的标签

提交触发进程并创建标签,而不是标签触发进程。服务器这样做是为了监视 svn 存储库而不是提交挂钩。

查看 CruiseControl.Net 关于此主题的文档,特别是选项 tagOnSuccess 和 tagBaseUrl。Hudson 和 CruiseControl 应该有类似的选项。

http://confluence.public.thoughtworks.org/display/CCNET/Subversion+Source+Control+Block

于 2009-08-06T21:18:47.600 回答