【问题标题】:Automating builds from subversion tags从颠覆标签自动构建
【发布时间】:2010-10-06 00:48:43
【问题描述】:

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

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

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

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

我的喜好:

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

【问题讨论】:

    标签: svn build-process build-automation build-management


    【解决方案1】:

    我已经使用 Hudson 完成了这项工作。在常规的 subversion 结帐槽中,我有一个树干结帐:

    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 命令的反引号,但必须使用 ' 因为反引号没有显示在这里。

    【讨论】:

      【解决方案2】:

      我喜欢hudson - 易于设置,并且可以使用 SVN 开箱即用。

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

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

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

      编辑

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        我会为此推荐Hudson

        【讨论】:

        • 是的,我想你明白我追求的是真正自动化发布机制的工作方式。如果我只是模型,这意味着开发人员所做的只是标记发布,其余的就是工作流自动化。我去看看哈德森。我用过 CC.NET,它真的不是为了做这项工作而构建的。
        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          为此目的在本网站上发布了一款商业产品!

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

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

          【讨论】:

            【解决方案6】:

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

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

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

            【讨论】:

              【解决方案7】:

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

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

              【讨论】:

                【解决方案8】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2010-09-16
                  • 2010-09-09
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-10-04
                  • 1970-01-01
                  • 2015-03-21
                  相关资源
                  最近更新 更多