我有一个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上无效吗?
谢谢!
我假设您在脚本中的某个位置使用以下命令导入了环境系统变量:
<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。
<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>
请参阅此处了解<hostinfo>
任务。
我最终以一种稍微不同的方式解决了这个问题。
这适用于Windows和Linux,也适用于命令行和Jenkins:
<exec executable="hostname" osfamily="unix" failifexecutionfails="false" outputproperty="env.COMPUTERNAME"/>
<echo message="${env.COMPUTERNAME}" />