Phing属性:从环境变量回退到属性文件

时间:2016-04-11 18:10:58

标签: phing fallback

有没有一种优雅的方法来确定房产的价值? 例如,我想允许从文件中读取属性,但也要从环境变量中获取属性。如果存在环境变量,我希望将其优先于文件的值。

这是我拥有的(使用示例属性id):

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"/> ,则会失败。

谢谢!

2 个答案:

答案 0 :(得分:2)

鉴于你的陈述:

  

如果存在环境变量,我希望将其优先于文件的值。

你可以做到

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

密钥应为 override =&#34; false&#34; 以允许env属性值保留。

答案 1 :(得分:0)

环境变量广泛用于CI / CD平台,如果是这种情况,可能以下内容将非常有用。

首先,我向您展示我的构建文件 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

正如您所见,我的构建文件属性文件保持不变。但是我有能力更改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