【问题标题】:Invoke specific ANT target in Jenkins if it exists如果存在,则在 Jenkins 中调用特定的 ANT 目标
【发布时间】:2019-07-05 18:19:45
【问题描述】:

如果给定的 ANT build.xml 文件中存在该目标,我想有条件地调用 Jenkins 中的特定 ANT 目标。我尝试使用条件步骤,对 build.xml 文件的内容使用正则表达式匹配。

所以我试图用 ANT 脚本文件 build.xml 检测 ANT 目标 publish-all 的存在,它存在,调用它。

我正在使用表达式:^.*publish-all.*$

带有标签:${FILE,path="build.xml"}

但是我收到以下错误:

2019.06.28 15:49:19 Exception caught evaluating condition: [org.jenkinsci.plugins.tokenmacro.MacroEvaluationException: Unrecognized macro 'basedir' in '<?xml version="1.0" encoding="UTF-8"?>
2019.06.28 15:49:19 <project name="My Project" basedir="." default="publish-local">
2019.06.28 15:49:19     
2019.06.28 15:49:19     <property file="${basedir}/build.properties"/>

接下来是包含发布所有目标的 build.xml 文件的其余内容。

它似乎试图实际解析 build.xml 文件中的令牌,并在 ANT 属性 ${basedir} 上绊倒,而不是仅仅将其视为纯文本来执行正则表达式正如我所料,模式匹配。 有没有办法让它工作,或者完全有其他方法?

【问题讨论】:

    标签: regex jenkins ant


    【解决方案1】:

    我放弃了尝试使用:正则表达式匹配,而是改用Execute Shell。在那里,我使用了一个简单的 grep 命令来检查字符串:name="publish-all" 是否存在于 ANT build.xml 文件中。

    #!/bin/bash
    grep name=\"publish-all\" build.xml
    

    如果 shell 的退出值为零(grep 在匹配时返回),则运行条件评估为 true。 grep 不匹配时返回一个非零值。

    这是我的 Jenkins 作业配置中的样子:

    【讨论】:

      猜你喜欢
      • 2013-06-17
      • 1970-01-01
      • 2016-02-02
      • 2019-05-23
      • 1970-01-01
      • 2014-12-01
      • 2017-07-06
      • 1970-01-01
      相关资源
      最近更新 更多