在 Jenkins 中调用特定的 ANT 目标(如果存在)

Invoke specific ANT target in Jenkins if it exists

如果给定的 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} 上绊倒了,而是而不是像我预期的那样将其视为纯文本来执行正则表达式模式匹配。 有没有办法让它起作用,或者完全是另一种方法?

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

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

如果 shell 的退出值为零(在匹配项中 grep returns),运行 条件计算结果为真。 Grep return 一个 non-zero 不匹配的值。

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