Ant主机名在命令行上运行,但在Jenkins中不起作用

时间:2014-07-02 19:54:33

标签: ant jenkins

我有一个带有以下内容的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上运行?

谢谢!

3 个答案:

答案 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}" />