Jenkins Groovy:如何从分支名参数中提取第三个数字?
从Git分支名提取第三个版本号的Groovy实现
针对release-1.2.3这种固定格式的分支名,这里有几种优雅的Groovy实现方式,比单纯硬写正则更简洁直观:
方法一:字符串分割(最直观,适合格式固定场景)
利用Groovy对字符串分割的简化语法,直接拆分出目标数字:
def extractThirdVersionNumber(String branchName) { // 同时按'-'和'.'分割字符串,拆分出各部分 def parts = branchName.split(/[- .]/) // 索引3对应第三个数字(parts[0]是release,1是第一位版本号,2是第二位,3是第三位) return parts.size() >= 4 ? parts[3] : null } // 调用示例 def newestTagNumber = extractThirdVersionNumber("release-1.2.3") println newestTagNumber // 输出3
如果分支格式绝对固定(不会出现异常格式),甚至可以简化成一行:
def newestTagNumber = branchName.split(/[- .]/)[3]
方法二:正则分组(灵活适配小格式变化)
如果担心分支名有微小格式差异(比如前两位版本号是多位数),用正则分组会更鲁棒,Groovy的=~操作符可以快速匹配:
def extractThirdVersionNumber(String branchName) { def matcher = branchName =~ /release-\d+\.\d+\.(\d+)/ return matcher.matches() ? matcher[0][1] : null } // 调用示例 def newestTagNumber = extractThirdVersionNumber("release-10.20.30") println newestTagNumber // 输出30
这种方式能准确捕获第三个数字,适配前两位版本号为多位数的场景。
方法三:函数式风格的字符串处理
如果偏好函数式写法,可以结合tokenize和安全调用操作符?.,避免空指针异常:
def extractThirdVersionNumber(String branchName) { // 先按'-'拆分取版本部分,再按'.'拆分取第三位 return branchName.tokenize('-')[1]?.tokenize('.')?.getAt(2) } // 调用示例 def newestTagNumber = extractThirdVersionNumber("release-1.2.3")
tokenize比split更轻量,适合处理简单分隔符,?.操作符能在分支格式不符合要求时返回null,避免报错。
内容的提问来源于stack exchange,提问作者Brzozova
相关产品推荐
相关产品推荐

