我有一个带有以下内容的Ant脚本来确定主机名(windows或unix):
<condition property="hostname" value="${env.COMPUTERNAME}" else="${env.HOSTNAME}">
<os family="windows" />
</condition>
后来我回应了这个:
<echo message="${hostname}" />
如果我在命令行上运行它,它会正确输出主机名:
[echo] sample.hostname.com
如果我在Linux奴隶上通过Jenkins运行,我会得到以下结果:
[echo] ${env.HOSTNAME}
任何人都知道为什么这可以在命令行上运行而不是在Jenkins上运行?
谢谢!
答案 0 :(得分:2)
我假设您在脚本中的某处使用以下内容导入了环境系统变量:
<property environment="env"/>
...
<condition property="hostname" value="${env.COMPUTERNAME}" else="${env.HOSTNAME}">
<os family="windows" />
</condition>
在这种情况下,${env.HOSTNAME}
需要在Linux从站上定义名为HOSTNAME
的系统变量。显然它不是。
更好的方法是通过hostname
命令:
<exec executable="hostname" outputproperty="hostname.prop"/>
<echo message="${hostname.prop}" />
这应该适用于 Linux和Windows。
答案 1 :(得分:1)
<exec executable="hostname" outputproperty="my.h.name"/>
<condition property="hostname" value="${env.COMPUTERNAME}" else="${my.h.name}">
<os family="windows" />
</condition>
或:
<hostinfo prefix="thisSys"/>
<condition property="hostname" value="${env.COMPUTERNAME}" else="${thisSys.NAME}">
<os family="windows" />
</condition>
请HERE查看<hostinfo>
任务。
答案 2 :(得分:0)
我最终以稍微不同的方式解决了这个问题。
这适用于Windows和Linux以及命令行和Jenkins:
<exec executable="hostname" osfamily="unix" failifexecutionfails="false" outputproperty="env.COMPUTERNAME"/>
<echo message="${env.COMPUTERNAME}" />