Jenkins Pipeline Groovy脚本:检查版本列表是否存在点版本
Jenkins Pipeline Groovy脚本:检查同主版本的非0点版本
需求分析
给定固定不可修改的版本列表(如["Version-2.5.0.0", "Version-2.4.0.0", "Version-2.3.1.0", "Version-2.3.0.0", "Version-2.0.0.0"]),需要遍历每个版本,同时判断当前版本所属的**主版本(x.y)下是否存在点版本(z≠0)**的条目。
解决方案代码
以下是类Java风格的Groovy实现,适配Jenkins Pipeline环境:
1. 定义固定版本列表
// 固定不可修改的版本列表 final List<String> VERSIONS = ["Version-2.5.0.0", "Version-2.4.0.0", "Version-2.3.1.0", "Version-2.3.0.0", "Version-2.0.0.0"]
2. 构建主版本到点版本的映射
先预处理版本列表,将同一主版本的点版本收集到映射中,避免重复遍历提升效率:
// 键:主版本(格式如"2.3"),值:该主版本下所有点版本的列表 Map<String, List<Integer>> mainVersionPatchMap = new HashMap<>() for (String version : VERSIONS) { // 拆分版本字符串,提取纯版本号部分(如"2.3.1.0") String versionNum = version.split("-")[1] // 按点号拆分版本号为数组 String[] versionParts = versionNum.split("\\.") // 拼接主版本标识(前两位) String mainVersion = versionParts[0] + "." + versionParts[1] // 转换点版本为整数 int patchVersion = Integer.parseInt(versionParts[2]) // 将点版本加入对应主版本的列表 if (!mainVersionPatchMap.containsKey(mainVersion)) { mainVersionPatchMap.put(mainVersion, new ArrayList<>()) } mainVersionPatchMap.get(mainVersion).add(patchVersion) }
3. 遍历版本列表并检查条件
遍历每个版本,通过映射快速判断是否存在同主版本的非0点版本:
for (String version : VERSIONS) { String versionNum = version.split("-")[1] String[] versionParts = versionNum.split("\\.") String mainVersion = versionParts[0] + "." + versionParts[1] // 判断当前主版本下是否有非0的点版本(兼容低版本Java的循环写法) boolean hasNonZeroPatch = false for (int patch : mainVersionPatchMap.get(mainVersion)) { if (patch != 0) { hasNonZeroPatch = true break // 找到一个非0点版本即可终止判断 } } // 这里替换为你的业务处理逻辑 println "版本 ${version} | 主版本 ${mainVersion} | 存在非0点版本:${hasNonZeroPatch}" if (hasNonZeroPatch) { // 存在非0点版本时的处理逻辑 // do something... } else { // 无点版本时的处理逻辑 // do something else... } }
关键说明
- 字符串拆分注意事项:使用
split("\\.")拆分版本号,因为点号在正则表达式中是通配符,需要转义。 - 映射的作用:提前构建主版本与点版本的映射,避免每次检查都遍历整个版本列表,尤其当版本数量较多时能显著提升效率。
- 兼容性:采用Java风格的循环判断替代Stream API,确保在Jenkins环境的Groovy版本中都能正常运行。
内容的提问来源于stack exchange,提问作者Angelo Uitz
相关产品推荐
相关产品推荐

