2010-11-17 68 views
0

我有一些使用Apache Commons Configuration的Java项目,它们被部署到多个环境中的多个服务器(dev/test/prod)。服务器特定配置的自动部署

所有的代码都是一样的,但是一些配置项更改,比如JMS URL(dev应指向dev等)以及服务器名称和环境(我使用这些配置项进行调试)。

例子:

<config> 
    <!-- environment can be dev|test|prod --> 
    <environment>dev</environment> 

    <serverName>myServer1</serverName> 

    <jmsUrl>http://my-jms-url-dev1,http://my-jms-url-dev2</jmsUrl> 
</config> 

目前,我部署,建立,然后手动编辑文件,以提供特定于服务器的配置。当我将它部署到单独的服务器上时,我想要一种自动化的方法,但我考虑过的所有方法都需要同等的痛苦来设置。

  • ANT - 使用SVN检出项目并在每个带有ANT的服务器上构建它。 ANT从两个静态文件(.servername和.environment)中读取服务器名称和环境,并将特定于服务器的配置复制到通用配置中。问题是,我仍然需要为每个服务器创建一个配置文件(我有24台服务器,而且这可能会增加,所以可扩展性不好)。

  • SVN - 将我的每个项目分支到特定于服务器的分发。在这里,可扩展性更糟,它成为维护的噩梦。

有没有人对我有任何提示?

回答

0

我明白了这一点。

步骤1.

获取主机的名称:

<target name="getHostname" description="Stores the current machines hostname in a property named 'hostname'"> 
    <property environment="env" /> 
    <condition property="hostname" value="${env.HOSTNAME}"> 
     <os family="unix" /> 
    </condition> 

    <!-- Execute hostname command on Linux systems --> 
    <exec executable="hostname" 
      osfamily="unix" 
      failifexecutionfails="false" 
      outputproperty="env.COMPUTERNAME"/> 

    <!-- On Windows, the hostname is an environment variable --> 
    <condition property="hostname" value="${env.COMPUTERNAME}"> 
     <os family="windows" /> 
    </condition> 

    <echo message="${env.COMPUTERNAME}" /> 

</target> 

第二步,创建一个模板文件,并用它来复制文件并做了查找/它取代:

<copy file="${scripts}/.servername.template" 
      tofile="${scripts}/.servername"> 
     <filterchain> 
      <replacetokens> 
       <token key="SERVER_NAME" 
         value="${env.COMPUTERNAME}" /> 
      </replacetokens> 
     </filterchain> 
    </copy> 

.servername.template文件包含以下字符串:

@[email protected] 

然后,我使用一个Web服务获取JSON字符串来告诉我我在什么环境。然后使用该任务来处理JSON并获取环境。

对于这样一个简单的任务来说很重型,但它的工作原理!

+0

哦,我应该补充。这只是为了在每台服务器上生成.servername和.environment文件。构建需要这些文件的实际任务还将使用进行查找/替换。漂亮! – bdetweiler 2010-12-20 23:00:26

+0

您可以简化获取Hostname目标: 将在Windows和Linux上工作,请参阅: http://stackoverflow.com/questions/1196989/ ant-machine-name-property/1375866#1375866 – Rebse 2011-03-13 20:48:25

+0

有趣。感谢分享! – bdetweiler 2011-08-05 20:29:45