Свойство Phing: откат от переменной среды к файлу свойств

Есть ли элегантный способ определения стоимости недвижимости? Например, я хотел бы разрешить чтение свойства из файла, а также захват из переменной среды. Если переменная окружения присутствует, я бы хотел расставить приоритеты над значением файла.

Вот что у меня есть (с примером свойства deploy.destination):

<property environment="env" />
<if>
    <isset property="env.DEPLOY_DEST" />
    <then>
        <property name="deploy.destination" refid="env.DEPLOY_DEST"/>
    </then>
</if>
<property file="build.properties"/>

Тем не менее, это довольно громоздко (особенно для более чем более собственности).

Есть ли способ, которым я могу сделать что-то подобное?

<property environment="env" />
<property name="deploy.destination" refid="env.DEPLOY_DEST"/>
<property file="build.properties"/>

В этом примере это не удастся, если env.DEPLOY_DEST не установлен.

Спасибо!

2 ответа

Учитывая ваше заявление:

Если переменная окружения присутствует, я бы хотел расставить приоритеты над значением файла.

ты можешь сделать

<property environment="env" />
<if>
    <available file="custom.properties"/>
    <then>
        <property file="custom.properties" override="false"/>
    </then>
</if>

Ключ должен быть override="false", чтобы позволить значениям свойства env остаться.

Переменные среды широко используются на платформах CI/CD, если это ваш случай, возможно, будет полезно следующее.

Сначала я покажу вам свой buildfile build.xml:

<project name="Demo" default="deployment">

    <target name="deployment">
        <property file="build.properties.ini"/>
        <echo message="Your host is: ${destination}"/>
    </target>

</project>

Мой файл свойств build.properties.ini:

destination = localhost

Если мы выполним единственную цель в нашем файле сборки, $ phing deployment, результат будет ожидаемым:

$ phing deployment
[echo] Your host is: localhost

Теперь выполните следующее $ phing deployment -Ddestination=example.com, вывод:

$ phing deployment -Ddestination=example.com
[echo] Your host is: example.com

Как вы можете видеть, мой buildfile и propertyfile остаются без изменений. Однако я был способен изменить значение destination Это связано с тем, что когда свойства задаются в качестве аргумента командной строки, они имеют более высокий приоритет, чем свойства, объявленные в файле свойств.

Заключить:

// Use the following in development
$ phing deployment

// And override "destination" in your CI/CD config
$ phing deployment -Ddestination=$DEPLOY_DEST

Источник: https://www.phing.info/phing/guide/en/output/chunkhtml/ch04s03.html

Другие вопросы по тегам