Автоматическое развертывание серверных конфигураций - PullRequest
0 голосов
/ 17 ноября 2010

У меня есть несколько проектов Java, которые используют конфигурацию Apache Commons, и они развернуты на нескольких серверах в нескольких средах (dev / test / prod).

Весь код одинаков, но некоторые элементы конфигурации изменяются, напримеркак URL-адреса JMS (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 - Branchкаждый из моих проектов для конкретного сервера.Здесь масштабируемость хуже, и поддерживать ее становится кошмаром.

У кого-нибудь есть какие-нибудь советы для меня?

1 Ответ

0 голосов
/ 21 декабря 2010

Я понял это.

Шаг 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 содержит эту строку:

@SERVER_NAME@

Затем я использую веб-сервис для получения строки JSON дляскажите мне, в какой среде я нахожусь. И я использую задачу для обработки JSON и получения среды.

Довольно тяжелый режим для такой простой задачи, но она работает!

...