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 "--- 执行完成 ---"

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐