我正在研究詹金斯。 我已经使用秘密文本构建了一个job1:username和Password变量为
APP1_Dev_password
通过在预定义参数中将此变量发送到我的其他job2,从我的ANT脚本中使用此变量。我正在使用
访问此变量<property name="DBPassword" value="${APP1_Dev_password}"/>
这很有效。 但我的ant脚本是我所有应用程序的单个通用脚本。 所以我使用
从我的ant脚本自动构造了这个APP1_Dev_password字符串<property name="constructPasswordVariable" value="${APPLICATIONNAME}_${ENVIRON}_password"/>
<echo message= "constructPasswordVariable: ${constructPasswordVariable}" />
这清楚地将构造密码打印为APP1_Dev_password。 现在我必须使用constructPasswordVariable属性的这个值作为从job1获取的变量。
<echo message= "PasswordValue: ${${constructPasswordVariable}}" />
此声明失败。你能指导我如何解决这个问题。
解
<property name="constructPasswordVariable" value="${env.Module}_${env.Environment}_password"/>
<echo message= "constructPasswordVariable: ${constructPasswordVariable}" />
<propertycopy name="prop" from="${constructPasswordVariable}"/>
<echo message= "ENV VALUE: ${prop}" />
输出
constructPasswordVariable: APP1_Dev_password
ENV VALUE: asdhasd
答案 0 :(得分:0)
Ant表示不直接支持嵌套属性。参考here
中的文档但是,可以使用库Flaka
来实现 来自参考文献的示例
<project xmlns:fl="antlib:it.haefelinger.flaka">
<fl:install-property-handler/>
<property name="foo" value="foo.value"/>
<property name="var" value="foo" />
<property name="buildtype" value="test"/>
<property name="appserv_test" value="//testserver"/>
<echo>
#{${var}} = foo.value
<!-- nested property -->
#{appserv_${buildtype}}
</echo>
</project>
还有另一个参考here,它可以在没有额外库的情况下实现。
<强>示例:强>
<project default="test">
<property name="foo" value="ABC"/>
<property name="pfoo" value="foo"/>
<target name="test">
<echo file="deref.properties">
deref: $${${pfoo}}
</echo>
<property file="deref.properties"/>
</target>