【问题标题】:How to support multiple build configurations with ant?ant如何支持多种构建配置?
【发布时间】:2011-04-13 19:12:33
【问题描述】:

我想知道使用 ant 支持多个构建版本的最佳方式是什么。在我当前的项目中,我有 3 个环境(开发、测试、生产)。有 2 个具有不同配置的生产服务器(不同的数据库、活动目录、Web 服务 url 等)。一次至少运行 2 个测试版本。添加其他配置选项只是为了测试启用/禁用的行为。

如何使用 ant 来处理这一切?

目前我们有一些目录,其中包含每个配置的文件集(persistence.xml、datasource、web.xml、jboss 特定文件、几个应用程序属性文件...),这些文件在构建期间被复制到适当的目录中(它是变得很多,并且在所有配置中可见的更改需要我们更改所有配置的文件)。
有 build-moduleA-dev、build-moduleB-dev、build-moduleA-test 之类的任务...

总体而言,构建过程如下所示:

  1. 加载构建属性
  2. 将服务器类编译到构建目录中
  3. 将 Web 类编译到构建目录中
  4. 构建接口 (gwt)
  5. 将静态资源和正确的配置文件复制到构建目录中
  6. 创建耳朵/战争/罐子

所以,我想知道:

  • 如何让它更简单?
  • 是保留单独的文件还是使用替换任务之类的东西更好?
  • 你是怎么做到的?

【问题讨论】:

    标签: configuration ant build


    【解决方案1】:

    从你写的内容中不清楚你是否已经这样做了,但你应该为每个环境生成相同的构建工件,然后可以作为构建管道的一部分通过不同的环境进行提升。

    就每个环境的配置而言,您也可以将它们视为构建工件,不同之处在于每个环境都有不同的工件。另一种方法是将配置存储在应用程序启动时加载的 DB 或 LDAP 中。但是,通常有一些环境配置不能存储在 DB 或 LDAP 中,至少是用于获取环境配置的 DB 或 LDAP。

    然后,您针对特定环境的部署过程取决于该环境的构建工件和配置工件。我已经使用 Apache Ivy 和 Ant 来管理这些类型的依赖项(以及正常的依赖项),我强烈推荐它。

    此外,对于您的部署过程,您应该使用PuppetCfEngine 之类的东西。它们允许您对环境执行幂等部署,因此与其说“给定我认为环境所处的状态,执行这些操作以使其达到我想要的状态”,它允许您说“无论状态如何所处的环境,找出需要执行的动作并执行,把它们置于我想要的状态”。

    我知道这超出了您关于管理配置的问题,但只有通过整个部署管道图,您才能转向更好的方式来管理每个环境的配置。

    关于部署管道的更多细节,我强烈推荐这本书Continuous Delivery。我相信您会发现第 2 章:配置管理非常相关。

    【讨论】:

    • 现在我已经设法将所有配置文件移到了 ear 档案之外,所以所有环境只有一个版本(从 jboss-web.xml 中移出 context-root 是一个棘手的问题)并且配置保存在给定服务器的文件系统中。它应该可以解决我一段时间的问题,但我希望我能抽出时间阅读您提到的书。
    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多