2012-04-11 51 views
0

我们正在为我们的webapp寻找适用于我们的持续集成系统的部署选项。我们正在构建一个.war文件。我们需要将其部署到多个不同的envs(例如DEV,QA,STAGE等)。据我所知,有两种方法在ENV特定属性来传递:将env特定属性传递到web应用程序

首先,启动Tomcat时使用-d选项:

-Denv=DEV 

这要求我们定制catalina.sh脚本每ENV。

二,使用环境变量启动Tomcat的面前:

export env=DEV; 

这要求我们必须调整部署脚本每个ENV。这是平台依赖的(即在Windows上你必须做set env=DEV)。

谁能告诉我这两个选项哪个更好?或者还有其他更好的吗?

回答

0

我们有一个网络应用程序,部署到14个不同的环境。为了管理这个,我们为每个环境创建一个独特的构建。

我们使用maven作为构建系统,因此每个环境都有唯一的配置文件。配置文件引用属性文件进行过滤,其中包含跨环境变化的配置。此信息被标记为Spring上下文文件,web.xml,weblogic.xml等(我们不会过滤源文件,因为它会变得很难看)。

第二部分是我们的Jenkins CI服务器。我们为每个引用相应配置文件的环境都有一份工作。这指向了我们颠覆回购中的一个众所周知的标签名称。所以流程如下:

  1. 开发发生并且代码被提交到主干。
  2. 需要构建到一些env中,所以我们创建一个名为“latest”的标签(如果它们存在,则删除旧的副本)。同时,我们也创建一个带有日期时间戳的标签,但这是可选的。
  3. 踢开适当的哈德森建造。这意味着我们不会构建一些开发人员工作站,并且已经配置了构建,所以没有什么可记住的。
  4. 将工件拉出Jenkins。

我已经看到应用程序配置维护在应用程序服务器本身,但除非你有类似glu来管理的东西,它很快就成为一个噩梦来维护。如果你有不同的团队进行开发和运营,情况尤其如此。

+0

我们正在建造Maven。但我们想为我们所有的env保留一个版本。我们以一种方式设计我们的项目,即所有应用程序配置文件都位于war文件之外(以便配置更改不会触发Maven构建)。在部署期间,我们需要将env名称(DEV,QA等)传入我们的应用程序,以便加载相应的属性文件。 – scabbage 2012-04-11 03:34:44

+0

夫妇想法: – 2012-04-11 15:23:44

+0

1)如果你在外部登台配置,为什么你需要一个env标识符?那个env的适当配置文件是不是那里部署的? 2)我已经使用本地主机名来识别env。这意味着你有一个映射表,但是。 – 2012-04-11 15:38:43

相关问题