带目录批量复制job
def sourceRegex = "im-dev-.*"// 匹配原始流水线的名字。def replaceStr = "dt-dev"// 替换后的字符。def targetNameOnly = "开发测试云-开发环境111" // 你改后的文件夹名字。// ================= 配置区 =================println "--- 开始批量克隆 ---"printl
import hudson.model.*
import com.cloudbees.hudson.plugins.folder.*
// ================= 配置区 =================
def sourceRegex = "im-dev-.*" // 匹配原始流水线的名字
def targetNameOnly = "开发测试云-开发环境111" // 你改后的文件夹名字
def findStr = "dev" // 要查找的字符
def replaceStr = "dt-dev" // 替换后的字符
// ==========================================
def jenkins = Jenkins.instance
// 找到目标文件夹对象
def allFolders = jenkins.getAllItems(Folder.class)
def targetFolder = allFolders.find { it.name == targetNameOnly || it.displayName == targetNameOnly }
if (targetFolder == null) {
println "【错误】找不到文件夹: ${targetNameOnly}"
return
}
println "【找到文件夹】路径: ${targetFolder.getFullName()}"
println "--- 开始批量克隆 ---"
// 遍历所有 Job
jenkins.getAllItems(Job.class).each { job ->
// 确保是 Job 且匹配正则,且不在目标文件夹里
if (!(job instanceof Folder) && job.name.matches(sourceRegex) && !job.getFullName().contains(targetFolder.name)) {
def newJobName = job.name.replace(findStr, replaceStr)
// 检查文件夹内是否已有同名任务
if (targetFolder.getItem(newJobName) != null) {
println "[跳过] 已存在: ${newJobName}"
} else {
try {
// 【关键修复】:直接调用文件夹对象的 copy 方法,避开字符串拼接路径
targetFolder.copy(job, newJobName)
println "[成功] 复制 ${job.name} -> ${newJobName}"
} catch (Exception e) {
println "[失败] 复制 ${job.name} 出错: ${e.message}"
}
}
}
}
println "--- 执行完成 ---"
更多推荐
所有评论(0)