我正在尝试自动化工程组的构建过程。作为自动化的一部分,我试图达到这样的程度:应用遵循某种模式的特定标签的行为将启动一个自动化过程,该过程将执行以下操作:

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

我非常确定我可以使用 subversion 中的后钩子来完成此操作,但我正在尝试找出一种方法来使用 subversion 钩子以外的其他方法来完成此操作。

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

我的喜好:

  • 现有产品可以完成全部或部分功能
  • 如果需要进行开发工作,.NET 是更好的选择
  • 适用于 Windows(我们有一个基于 Linux 的存储库,但构建全部发生在 Windows 上)
有帮助吗?

解决方案

我喜欢 哈德逊 - 易于设置,并且可以通过 SVN 开箱即用。

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

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

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

编辑

我最近在我的 Hudson 构建服务器上添加了一项工作,用于侦听 google/gmail jabber 聊天。我可以使用此机制将“常规”构建“升级”为发布构建。我刚刚设置了一项新工作,该工作执行将私有构建升级/发布到候选版本中所需的步骤。

其他提示

我已经使用 Hudson 完成了此操作。在常规的颠覆检查槽中,我有一个主干检查:

http://dryad.googlecode.com/svn/trunk/dryad

然后,作为第一个构建操作,我有一个“执行 shell”,并在该 shell 中使用 svn 开关更改为存储库中的最新标签:

SVN开关 http://dryad.googlecode.com/svn/tags/'svn ls http://dryad.googlecode.com/svn/tags |尾巴-n 1'干ad

下一个构建步骤是 maven“全新安装”命令,该命令使用标记版本中的代码启动构建。

我还没有弄清楚如何让 Hudson 从最新的标记版本开始,而不是必须进行切换,但切换是有效的。然后,您可以在更新标签目录时触发。

它是自动化的...有点拼凑,但它有效......

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

听起来您正在寻找像 CruiseControl 或 Hudson 这样的持续集成构建引擎(Hudson 用 java 编写,但在 Windows 中非常容易使用)。

现在,您可以为这些工具捏造构建脚本来监视标签目录,但这会有点违反规则,因为它们旨在监视特定位置并在该位置构建项目。如果您查看整个标签目录,您很容易就会发现所有标签都将在构建机器上检出,并且您需要一个顶级脚本来决定构建哪个标签。

对于您想要的内容,构建引擎可以监视特定位置(例如“/branches/release”)。如果您然后合并到该分支中,哈德森将自动构建项目,存档工件并为您创建标签(如果它都成功)(请参阅subversion标记插件)。

我不喜欢在提交后挂钩中执行此类操作,因为它会使提交阶段花费太长时间。然而,TeamCity 是一个源代码控制系统,它的功能完全可以做到这一点,而不会在提交时阻碍您。

我会推荐 哈德逊 为了这。

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

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

出于此目的,本网站上已发布商业产品广告!

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

您可能需要向 SVN 添加后挂钩来触发构建开始,除非您希望它按照时间表运行。

我还为此推荐 Hudson。我想做类似的事情,创建一个标签并开始构建。相反,我选择为 hudson 使用这个插件:

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

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

我在用着 南安特 (和 NAntContrib)用于自动构建。它会自动检查 subversion 存储库是否有更改,并(如果有)获取最新的源代码版本并开始构建。

我不确定现有任务是否允许完全执行您想要的操作,但也许您可以使用它作为开始,如果需要,可以使用满足您特殊需求的任务来扩展它(它是用 .NET 开发的)。

正如其他人所说,您需要一个持续集成服务器(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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top