我正在处理这个管道,其中从提交消息运行测试应该是一个选项。
我是groovy和regex的新手,但我已经设法从提交消息中获得匹配,并且可以很好地运行我的测试。唯一的问题是,提交消息中不能有任何其他内容,否则它将失败。
我希望能够在提交消息的任何地方写我想运行的测试,或者作为顶部的第一件事,然后是消息的其余部分。
提交消息可能类似于..
jenkins:BASE_TEST, RADIO_TEST, CRYPTO_TEST
blablabla
我的脚本如下所示:
def testPattern = ~/(?:^|[\r\n]+)jenkins:([, a-zA-Z_]+)(?:$|[\r\n]+)/
for (int i = 0; i < currentBuild.changeSets.size(); i++)
{
//entries -> author, timestamp, msg etc.
def entries = currentBuild.changeSets[i].items
for (int j = 0; j < entries.length; j++)
{
def testMatcher = testPattern.matcher(entries[j].msg)
if (testMatcher.matches())
{
def testList = testMatcher.group(1).tokenize(',')
for (int k = 0; k < testList.size(); k++)
{
testList[k] = testList[k].replaceAll("\\s", "")
switch (testList[k])
{
case 'RUN_ALL_TESTS':
env.SPREADING_FACTOR_TEST = true
env.RADIO_TEST = true
env.BASE_TEST = true
env.DEVELOP_TEST = true
env.CRYPTO_TEST = true
break
case 'SPREADING_FACTOR_TEST':
env.SPREADING_FACTOR_TEST = true
break
case 'RADIO_TEST':
env.RADIO_TEST = true
break
case 'BASE_TEST':
env.BASE_TEST = true
break
case 'DEVELOP_TEST':
env.DEVELOP_TEST = true
break
case 'CRYPTO_TEST':
env.CRYPTO_TEST = true
break
default:
break
}
}
}
}
}
我尝试过用多种方法在testPattern中设置multiline,但是我可能做错了。我在以下方面花了很多时间:https://regex101.com/r/43se9W/1
regex101 example
在regex101中,它显然没有匹配的问题,但是我的testMatcher.matches()返回false,因此问题是它不能匹配。
我已经尝试查看了https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#compile(java.lang.String),但是可能我实现它的方式不对。
1条答案
按热度按时间li9yvcax1#
所以很明显你需要使用find()方法而不是matches(),duh..它现在起作用了。