如果存在,则在Jenkins中调用特定的ANT目标

时间:2019-06-28 14:58:12

标签: regex jenkins ant

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

enter image description here

因此,我正在尝试使用ANT脚本文件build.xml检测ANT目标全部发布的存在,并且它存在,请调用它。

我正在使用表达式: ^。* 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} ,而不是像对待纯文本一样执行正则表达式符合我的预期。 有没有办法使它起作用,或者完全是另一种方法?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

enter image description here