You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Pipeline使用正则表达式时如何检测是否存在匹配结果?

错误根因

你使用Groovy的=~正则匹配运算符返回的是Matcher对象,当没有匹配到任何符合规则的内容时,该对象为空集合,直接访问下标[0]就会触发下标越界异常。

解决方案

在访问匹配分组前先判断是否存在匹配结果,Groovy中可以直接将Matcher对象作为布尔判断条件,空Matcher会返回false,参考修改后的代码:

pipeline {
    agent {
        node {
            label 'myApplicationNode'
        }
    }
    environment {
        GIT_MESSAGE = "${bat(script: "git log --no-walk --format=format:%%s ${GIT_COMMIT}", returnStdout: true)}".readLines().drop(2).join(" ")
    }
    stages {
        stage('get_commit_msg'){              
            steps {
                script {
                     def gitmsg=env.GIT_MESSAGE
                     def chngnr = gitmsg =~/([0-9]{1,8})/
                     // 新增匹配结果判断
                     if (chngnr) {
                         env.ChangeNr = chngnr[0][1]
                     } else {
                         // 无匹配时可按业务需求处理,示例为设置默认空值
                         env.ChangeNr = ""
                         // 若要求必须匹配到结果才能继续执行,可主动终止流水线:
                         // error "未从提交信息中提取到符合要求的变更编号"
                     }              
                }
            }
        }
    }
}

可选简化写法

如果只需要做简单的默认值赋值,可以用三目运算符简化代码:

env.ChangeNr = chngnr.size() > 0 ? chngnr[0][1] : ""

内容的提问来源于stack exchange,提问作者havmaage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:39:02