提交消息中的Jenkins groovy正则表达式模式搜索和匹配未按预期工作

06odsfpq  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(201)

我正在处理这个管道,其中从提交消息运行测试应该是一个选项。
我是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),但是可能我实现它的方式不对。

li9yvcax

li9yvcax1#

所以很明显你需要使用find()方法而不是matches(),duh..它现在起作用了。

相关问题