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

Jenkins groovy regex pattern search and match in commit message not working as expected

我正在使用此管道,其中 运行来自提交消息的宁测试应该是一个选项。

我是 groovy 和正则表达式的新手,但我已经设法从提交消息中获得匹配项并且 运行 我的测试可以正常进行。唯一的问题是,commit message 里不能再写别的,否则就失败了。

我希望能够在提交消息中的几乎任何位置编写我想要的测试 运行。或者可能作为顶部的第一件事,然后是其余的消息。

提交消息可能看起来像..

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 中设置多行,但我可能做错了。我用了很多时间在: https://regex101.com/r/43se9W/1

regex101 example

在 regex101 中它显然匹配没有问题,但我的 testMatcher.matches() returns 错误。因此问题是它无法匹配。

我试过查看 https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#compile(java.lang.String) 但也许我执行错了。

显然您需要使用 find() 方法而不是 matches(),呃..现在可以使用了。