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

如何在Jenkins中自动迁移特性分支构建任务至特性文件夹

如何在Jenkins中自动将特性分支构建任务迁移至对应文件夹?

首先确认已安装Jenkins的Folders插件,这是实现任务归类的基础。下面提供几种实用方案,覆盖新任务自动创建归类和已有任务批量迁移的场景:

方案一:Pipeline自动创建并归类新任务(推荐)

先在Jenkins中手动搭建好根项目文件夹及feature、bugfix等一级子文件夹(如你示例中的结构),然后通过Pipeline种子任务自动扫描分支、创建对应子文件夹及构建任务:

pipeline {
    agent any
    triggers {
        pollSCM('H/5 * * * *') // 每5分钟扫描一次代码仓库分支
    }
    stages {
        stage('分支识别与任务创建') {
            steps {
                script {
                    def scmBranches = scm.branches
                    scmBranches.each { branch ->
                        def branchName = branch.name
                        // 匹配feature/前缀的特性分支,可根据实际分支规则调整正则
                        if (branchName =~ /^feature\/PROJECT\d+-\d+/) {
                            def folderHierarchy = branchName // 直接用分支路径作为文件夹层级,如feature/PROJECT2023-1
                            def fullFolderPath = "Project Folder/${folderHierarchy}"
                            
                            // 检查目标文件夹是否存在,不存在则递归创建
                            if (!Jenkins.instance.getItemByFullName(fullFolderPath)) {
                                def currentFolder = Jenkins.instance.getItem("Project Folder")
                                folderHierarchy.split('/').each { segment ->
                                    def subFolder = currentFolder.getItem(segment)
                                    if (!subFolder) {
                                        subFolder = currentFolder.createProject(Folder.class, segment)
                                        subFolder.displayName = segment
                                    }
                                    currentFolder = subFolder
                                }
                            }
                            
                            // 在目标文件夹下创建构建任务
                            def jobName = "build-${branchName.replace('/', '-')}"
                            job("${fullFolderPath}/${jobName}") {
                                scm {
                                    git(url: '你的代码仓库地址', branch: branchName)
                                }
                                triggers {
                                    scm('H/10 * * * *') // 任务自身的SCM触发规则
                                }
                                steps {
                                    // 替换为你的实际构建步骤,比如Maven打包、Docker构建等
                                    sh 'mvn clean package'
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

将上述Pipeline保存为根项目文件夹下的一个种子任务,它会定期扫描仓库分支,自动完成特性分支任务的创建与归类。

方案二:Groovy脚本批量迁移已有任务

如果已经存在分散的特性分支构建任务,可通过Jenkins脚本控制台(Manage Jenkins -> Script Console)执行Groovy脚本批量迁移:

// 根项目文件夹名称,需与Jenkins中实际名称一致
def rootFolderName = "Project Folder"
def rootFolder = Jenkins.instance.getItem(rootFolderName)

// 筛选需要迁移的任务,根据你的任务命名规则调整匹配正则
def jobsToMigrate = Jenkins.instance.items.findAll { job ->
    job.name =~ /^build-feature-.+/ // 示例:匹配以build-feature-开头的任务
}

jobsToMigrate.each { job ->
    // 从任务名称中提取分支路径,比如从build-feature-PROJECT2023-1得到feature/PROJECT2023-1
    def branchPath = job.name.replace('build-', '').replace('-', '/')
    def fullFolderPath = "${rootFolderName}/${branchPath}"
    
    // 递归创建目标文件夹(如果不存在)
    def targetFolder = Jenkins.instance.getItemByFullName(fullFolderPath)
    if (!targetFolder) {
        def currentFolder = rootFolder
        branchPath.split('/').each { segment ->
            def subFolder = currentFolder.getItem(segment)
            if (!subFolder) {
                subFolder = currentFolder.createProject(Folder.class, segment)
                subFolder.displayName = segment
            }
            currentFolder = subFolder
        }
        targetFolder = currentFolder
    }
    
    // 移动任务到目标文件夹
    targetFolder.moveItem(job)
    println "已迁移任务:${job.name} -> ${fullFolderPath}"
}

注意:执行脚本前务必备份Jenkins数据,避免意外;脚本中的任务匹配规则和分支路径转换逻辑需根据实际情况调整。

方案三:Job DSL插件管理任务归类

使用Job DSL插件通过代码定义任务及文件夹结构,适合标准化管理所有Jenkins任务:

// 创建根文件夹下的一级子文件夹
folder('Project Folder/feature') {
    displayName('特性分支任务')
}

// 创建具体特性分支的子文件夹
folder('Project Folder/feature/PROJECT2023-1') {
    displayName('PROJECT2023-1 需求')
}

// 在对应文件夹下创建构建任务
job('Project Folder/feature/PROJECT2023-1/build-PROJECT2023-1') {
    scm {
        git('你的代码仓库地址', 'feature/PROJECT2023-1')
    }
    steps {
        sh 'mvn clean package'
    }
    triggers {
        scm('H/10 * * * *')
    }
}

将上述DSL脚本放入Job DSL种子任务中执行,会自动创建指定的文件夹结构及对应构建任务。

内容的提问来源于stack exchange,提问作者John Nico Novero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:40:01