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

用DSL创建多分支流水线作业,如何用Groovy获取Git仓库?

How to Extract Git Repo URLs from Multibranch Pipeline Jobs & Batch Create Them with DSL

Got it, let's break this down for you. The problem with your current script is that you're targeting individual branch jobs (WorkflowJob) instead of the parent Multibranch Pipeline projects. The Git repository URL lives in the parent project's configuration, not the branch-specific jobs. Here's how to fix this and then use the data to batch create jobs with DSL.

Step 1: Extract Git Repo URLs from Existing Multibranch Jobs

Use this modified Groovy script in the Jenkins Script Console to pull both job names and their associated Git repo URLs:

// Fetch all Multibranch Pipeline projects
def multiBranchProjects = Jenkins.instance.getAllItems(org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject)

multiBranchProjects.each { project ->
    println "Multibranch Job Name: ${project.fullName}"
    
    // Get the SCM configuration (we'll handle Git specifically here)
    def scmConfig = project.scm
    if (scmConfig instanceof hudson.plugins.git.GitSCM) {
        // Grab the first remote URL (adjust if your job uses multiple remotes)
        def gitRepoUrl = scmConfig.userRemoteConfigs.first().url
        println "Git Repository URL: ${gitRepoUrl}"
    } else {
        println "⚠️  SCM type is not Git: ${scmConfig.getClass().name}"
    }
    println "-------------------------"
}

Notes:

  • Make sure you have the necessary permissions to run scripts in the Jenkins Script Console (usually Admin or Script approval rights).
  • If some of your multibranch jobs use a different SCM (like SVN), the script will flag that so you can handle those cases separately.

Step 2: Batch Create Multibranch Pipeline Jobs with Job DSL

Once you have a list of job names and their Git URLs, you can use this Job DSL script to create all your jobs in one go. First, structure your job data, then loop through it to generate each job:

// Replace this with your extracted job names and repo URLs
def jobList = [
    [jobName: "my-team/project-a", repoUrl: "git@github.com:my-org/project-a.git"],
    [jobName: "my-team/project-b", repoUrl: "git@github.com:my-org/project-b.git"],
    // Add all 200-300 jobs here
]

// Loop through the list to create each Multibranch Pipeline Job
jobList.each { jobData ->
    multibranchPipelineJob(jobData.jobName) {
        branchSources {
            branchSource {
                source {
                    git {
                        remote(jobData.repoUrl)
                        credentialsId("your-git-credentials-id") // Replace with your Jenkins Git credential ID
                        includes("*") // Scan all branches
                        excludes("")
                    }
                }
            }
        }
        // Optional: Add triggers for branch scanning
        triggers {
            periodicFolderTrigger {
                interval("1d") // Scan for new branches once per day
            }
        }
        // Optional: Set branch retention policies
        orphanedItemStrategy {
            discardOldItems {
                numToKeep(5) // Keep last 5 deleted branches' history
                daysToKeep(30) // Keep history for 30 days
            }
        }
    }
}

Tips:

  • Replace your-git-credentials-id with the ID of your Git credentials stored in Jenkins (you can find this in Jenkins > Manage Jenkins > Manage Credentials).
  • Adjust the triggers, retention policies, or other settings to match your team's needs.

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:44:42