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上无效吗?

谢谢!

我假设您在脚本中的某个位置使用以下命令导入了环境系统变量:

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

相关内容

  • 没有找到相关文章

最新更新