代码之家  ›  专栏  ›  技术社区  ›  Ajaxx

从subversion标签自动构建

  •  12
  • Ajaxx  · 技术社区  · 17 年前

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

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

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

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

    我的偏好:

    • 完成全部或部分功能的现有产品
    • 如果需要进行开发工作。NET更佳
    • 适用于Windows(我们有一个基于Linux的仓库,但所有构建都发生在Windows上)
    8 回复  |  直到 16 年前
        1
  •  5
  •   Tim    15 年前

    我是用Hudson做的。在常规的subversion结账槽中,我有一个后备箱结账:

    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 |尾部-n1'树莓

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

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

    它是自动化的。..有点笨拙,但它奏效了。..

    该开关应包含第二个svn命令的回溯,但必须使用“”,因为此处没有显示回溯。

        2
  •  8
  •   ksclarke    16 年前

    我喜欢 hudson -易于设置,与SVN一起开箱即用。

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

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

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

    编辑

    我最近在我的hudson构建服务器上添加了一个监听google/gmail jabber聊天的作业。我可以使用此机制将“常规”版本“升级”为发布版本。我刚刚创建了一个新任务,该任务执行将私有构建推广/发布到候选版本中所需的步骤。

        3
  •  4
  •   Jim T    17 年前

    听起来你想要一个持续集成的构建引擎,比如CruiseControl或Hudson(Hudson是用java编写的,但在windows中非常容易使用)。

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

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

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

    我推荐 Hudson 为了这个。

        4
  •  3
  •   Bert Huijben    17 年前

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

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

        5
  •  2
  •   VBNight    17 年前

    正是为了这个目的,这个网站上已经发布了一个商业产品的广告!

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

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

        6
  •  2
  •   BigBen    15 年前

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

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

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

        7
  •  1
  •   M4N    17 年前

    我在用 NAnt (以及 NAntContrib )用于自动化构建。它会自动检查subversion存储库中的更改,并(如果有的话)获取最新的源代码版本并开始构建。

    我不确定现有的任务是否允许你做你想做的事情,但也许你可以把它作为一个开始,如果需要,可以根据你的特殊需求扩展它(它是用.NET开发的)。

        8
  •  1
  •   mcdon    17 年前

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

    推荐文章