首页 > 解决方案 > 使用 groovy 从 GIT 提交消息中提取 Jira 票证

问题描述

我正在编写 Jenkins 管道,其中我从 GIT 提交消息中提取 Jira 票证。我正在使用 JIRA ID 正则表达式。如何处理多行字符串?我还必须显示不包含任何有效票证 ID 的提交消息。如何使用 groovy 中的 if-else 循环来做到这一点?以下逻辑适用于单行,但不适用于多行。

def commit = """new change
CO-10389
SRE-1234"""

def regex = (/[\s|]?([A-Z]+-[0-9]+)[\s:|]?/) 

if(commit =~ regex){
    def jira = commit.readLines().findAll(/[\s|]?([A-Z]+-[0-9]+)[\s:|]?/)
    println jira
} else {
    println commit
}

标签: gitgroovyjenkins-pipelinejirajenkins-groovy

解决方案


如果您还想处理不匹配的行,多行正则表达式将无济于事,因此您应该逐行处理文本:

import java.util.regex.Matcher

def commit = """new change
CO-10389
CO-
SRE-1234"""

commit.eachLine{ l ->
  switch( l ){
    case ~/[\s|]?([A-Z]+-[0-9]+)[\s:|]?[\s|]?.*/:
      //println "JIRA: ${Matcher.lastMatcher[0][1]}"
      // or
      println "JIRA: ${( l =~ /[\s|]?([A-Z]+-[0-9]+)[\s:|]?.*/ )[0][0]}"
      break
    default:
      println "no JIRA $l"
  }
}

印刷

no JIRA new change
JIRA: CO-10389
no JIRA CO-
JIRA: SRE-1234

推荐阅读