【问题标题】:Pass environment variables to Ant build.xml from Jenkins?将环境变量从 Jenkins 传递给 Ant build.xml?
【发布时间】:2014-07-18 08:12:05
【问题描述】:

我使用 Jenkins 作为 CI。我有一个 build.xml。 Build.xml 有如下代码。

<property name="environment" value="$environment}" />

如何从 Jenkins 向 build.xml 传递值?我可以通过环境变量传递它吗?

【问题讨论】:

    标签: java jenkins continuous-integration hudson jenkins-cli


    【解决方案1】:

    您的环境变量可通过 environment 属性获得。 在下面的示例中,环境变量 VIEW 是通过 ${env.VIEW} 从简单的 hello world ant 脚本中打印出来的。将 VIEW 更改为感兴趣的环境变量的名称。

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="Hello World" default="Hello" basedir=".">
        <property environment="env"/>
        <property name="HelloText" value="Hello"/>
        <target name="Hello">
            <echo>VIEW=${env.VIEW}</echo>
        </target>
    </project> 
    

    重要提示!请注意,为了让 ant 能够理解 env.VIEW,需要此行:

    <property environment="env"/>
    

    【讨论】:

    • 也许我在这里遗漏了一些东西。但我试图在 Ant 中利用像 NODE_NAME 或 NODE_LABELS 这样的 Jenkins 变量,但它没有用。使用 ${env.NODE_NAME}
    • 您需要先设置 才能利用任何 Jenkins 变量。我现在明白了……谢谢。
    【解决方案2】:

    如果您的 ant 构建依赖于属性 environment

    <property
      name="environment"
      value="a_value_I_edit_just_before_run_ant_default_target_mannually" />
    

    您可以将 Jenkins 的作业配置为使用参数进行构建:

    所以 Jenkins 将记录(即在 Windows 上)类似:

    cmd.exe /C '"ant.bat ant -file build.xml -Djenkins_environment=myValue && exit %%ERRORLEVEL%%"'
    

    然后您可以修改您的 ant 构建以检查系统属性:

    <property
      name="manually_edited_environment"
      value="a_value_I_edit_just_before_run_ant_default_target_manually" />
    
    <condition property="environment"
               value="${jenkins_environment}"
               else="${manually_edited_environment}">
        <isset property="jenkins_environment" />
    </condition>
    

    如果设置了jenkins_environment 属性,则environment 获取其值,否则environment 获取manually_edited_environment 的值;构建的剩余部分仍然依赖于属性environment

    如果您在正确匹配 -DpropertyName 时遇到问题,请使用 echoproperties ant task 让 ant 记录所有系统属性。

    【讨论】:

      【解决方案3】:

      您的 ant 脚本应如下所示:-

      <target name="test" >
          <property environment="env" />
          <echo>BUILD_NUMBER: ${env.BUILD_NUMBER}</echo>
      </target>
      

      【讨论】:

        【解决方案4】:

        您可以使用构建参数(即:myParameter)设置属性,并使用 ${myParameter} 在 ant 脚本中获取它们。

        请确保不要在 jenkins 的参数名称中使用点,因为在 ant 脚本中获取它们可能会出现问题。

        至于环境变量,我不知道,抱歉。

        【讨论】:

        • neomega, “您可以使用构建参数(即:myParameter)设置属性,并使用 ${myParameter} 在 ant 脚本中获取它们。”我无法理解。你能解释一下怎么做吗?
        • 我回答“如何将值从 Jenkins 传递给 build.xml?”。 Jenkins 将作业的所有构建参数添加到 ant 构建中:$ ant -file build_jenkins.xml -Dversion=7.1 -DsendFtp=true。这些参数值在ant属性${version}${sendFtp}
        【解决方案5】:

        考虑到上述情况的参数化构建,例如,您必须在作业中设置名为 environment 的变量并从用户那里获取其值。现在您可以使用 property name="environment" value="$environment} 在 build.xml 中引用它的值

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-21
          • 2016-12-08
          • 2013-12-29
          • 2019-04-10
          • 2014-08-13
          • 1970-01-01
          • 1970-01-01
          • 2021-09-05
          相关资源
          最近更新 更多