【问题标题】:Using environment properties in ant在 ant 中使用环境属性
【发布时间】:2016-09-01 08:18:39
【问题描述】:

这可能是一个微不足道的问题,但我对 Ant 中环境的使用感到困惑。我想更新一个我知道在 Jenkins 上可以正常工作的目标,并且我需要在推送到 prod 之前在本地测试我的更改。然而,即使我写了一个微不足道的目标,Ant 似乎也不想读取我的环境变量:

<target name="test">
    <property environment="env" />
    <echo>
        ${env.user.country}
        ${env.user.language}
        ${env.TARGET}
    </echo>
</target>

打印出来的

Buildfile: /home/local/ANT/.../Workplace/dra/draModelsConfig/build.xml

test:
     [echo] 
     [echo]             ${env.user.country}
     [echo]             ${env.user.language}
     [echo]             ${env.TARGET}
     [echo]         

BUILD SUCCESSFUL Total time: 0 seconds

我将目标准确地称为 Jenkins 主机在构建日志中记录它的方式(对此问题进行了简化):

ant -file build.xml -DTARGET=build test

为什么env 不包含应有的环境变量?

【问题讨论】:

  • @Andrei_N 没有帮助,看看我的代码,它已经包含了property 任务
  • 由于没有设置变量,可能会以这种方式打印
  • 是的,但问题是为什么?例如,我认为-DTARGET 会将其设置在环境中。至于其他属性,都是在我的操作系统环境中设置的
  • 您将普通属性(如访问权限)与环境混合在一起。 user.country 和 user.language 在 Java 进程中可用。所以你可以在没有 env 前缀的情况下访问它们。说... ${user.country}

标签: java jenkins ant environment-variables


【解决方案1】:

在命令中:

ant -file build.xml -DTARGET=build test

-DTARGET=build 正在设置一个名为TARGET属性,而不是环境变量。

TARGET 可以像常规属性一样被回显:

build.xml

<project name="ant-echo-command-line-prop">
    <echo>My TARGET: ${TARGET}</echo>
</project>

输出

$ ant -DTARGET=build
[echo] My TARGET: build

【讨论】:

  • 好的,我明白了,那么我不明白为什么 Jenkins 会运行我在问题中包含的命令。它必须在运行目标之前设置构建的参数,因为我们肯定为环境读取的ant目标。我认为您的回答是可以的,尽管它没有告诉我有关 Jenkins 的信息,因为您解释了为什么这个 ant 目标没有做我认为应该做的事情
猜你喜欢
  • 2010-10-30
  • 2013-09-01
  • 2016-09-08
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2020-07-23
  • 1970-01-01
相关资源
最近更新 更多