Deployment 从WAR、EAR和JAR中删除特定于环境的属性

Deployment 从WAR、EAR和JAR中删除特定于环境的属性,deployment,weblogic,Deployment,Weblogic,在我的公司,我们使用Weblogic(取决于版本6.1到11g之间的安装) 现在,我们将特定于环境的变量嵌入耳朵、罐子和战争中。这甚至包括weblogic.xml文件,其中有如下内容: <working-dir>/opt/bea/wl61/server/domains/deploy/prod3/temp/work</working-dir> /opt/bea/wl61/server/domains/deploy/prod3/temp/work 这意味着我们必须为每个环

在我的公司,我们使用Weblogic(取决于版本6.1到11g之间的安装)

现在,我们将特定于环境的变量嵌入耳朵、罐子和战争中。这甚至包括
weblogic.xml
文件,其中有如下内容:

<working-dir>/opt/bea/wl61/server/domains/deploy/prod3/temp/work</working-dir>
/opt/bea/wl61/server/domains/deploy/prod3/temp/work
这意味着我们必须为每个环境重建同样的罐子、耳朵和战争。而且,如果环境发生变化,我们必须重建和重新部署战争、耳朵和罐子。您可以想象我们在构建和发布管理方面遇到的问题(这是我的工作)

在我的上一个职位上,我们使用JBoss,并且以某种方式能够创建通用的和可部署的EAR。我会让Hudson构建一个ear,开发人员可以使用它进行测试。同样的ear可以在他们的环境中传递给我们的QA团队,用于UAT、阶段化和生产

我们可以完成这一惊人的壮举,因为我们将JBoss配置为查找外部或ear本身的属性文件。有一个
config
目录,它是
deploy
目录的同级目录,其中包含任何需要的属性文件。是否可以将Weblogic设置为执行相同的操作

我们需要一种方法来做到这一点,只需最少的代码更改。我已经检查了源代码,在指定加载属性文件中的值时,我们没有指定目录名。因此,我们可以用某种
类路径
的想法来实现这一点

我知道这些属性必须存在于某个地方,但我更希望它可以在环境中配置,并且可以通过使用相对于
deploy
目录的路径来完成。我希望使用相同的ear、jar和war文件,无论您在什么系统上:Windows PC桌面、Linux、Mac或Solaris服务器

最棘手的问题是我们的
weblogic.xml
嵌入路径。该路径是否可以相对于部署目录而不是系统的根目录

如前所述,我是构建经理,就每个人而言,这是我的头痛,而不是他们的问题。如果部署不顺利,指责可以直接指向我


为了做到这一点,我必须能够找到一个简单的解决方案,我们实施。我们不能重写一切,改变周围的一切。否则,我就不能让其他球队这么做。毕竟,这是我的问题,不是他们的问题。我们需要一些代码变化最小(最好没有)和Weblogic设置变化最小的东西。我希望在我们软件的3.4版中,我们能以传统的特定于环境的方式进行部署,但在3.5版中,我们可以以一种与环境无关的方式进行部署,并在部署环境中进行最小的更改。

我能感受到您的痛苦-我在几家公司也经历过同样的过程。与当前设置相比,您有两个显著改进的选项:

1) 修改
类路径
以使用覆盖ear文件中所有内容的外部目录/属性文件。这很容易实现,但如果没有适当的标准/治理,可能会失控

2) 使用部署计划定义特定于环境的变量。然而,直到WebLogic 9.2发布后,才引入部署计划

3) 将所有特定于环境的文件滚到它自己的jar中。所有环境都指向同一个文件,但它会根据您的构建过程生成不同的内容。优点-包含所有道具的单个文件,易于移动等。缺点-无法动态更改属性并强制从JVM重新加载


基于存储库,可能还有其他选项。嗯,所有这些工作或多或少都是一样的——是过程和强制执行过程防止了问题。

谢谢。我想我们可以做到。这就是我们对JBoss所做的,但是这里的人认为这不适用于Weblogic。我也知道#2,但我们主要知道#1。但是,我们确实让开发人员使用了相同的*.properties文件,因此我们没有十几个文件需要管理#2可能对服务器信息很有用,但我们在6.1上仍然有很多站点,3是一个非常有趣的想法。通常我说IT中的部署人员必须管理属性,但这里是CM,所以当属性发生变化时,这至少会让我们处于循环中。当然,还有更多的东西需要追踪