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

如何通过代码在Jenkinsfile中获取Jenkins多分支流水线的分支列表?

当然可以通过代码获取Jenkins多分支流水线的分支列表!

你说得对,Jenkins的环境变量列表里确实没有直接提供分支列表的变量,但我们可以通过两种可靠方式在Jenkinsfile中获取这些动态分支信息:利用Jenkins的Groovy内部API(推荐,直接在流水线内操作),或者调用Jenkins REST API。下面分别详细说明:

方法一:使用Jenkins Groovy内部API

Jenkins的多分支流水线项目本质是MultiBranchProject类型的核心对象,我们可以在Jenkinsfile中通过Groovy代码直接访问Jenkins实例,获取当前项目的分支列表。

示例代码如下:

pipeline {
    agent any
    stages {
        stage('获取分支列表') {
            steps {
                script {
                    // 获取当前的多分支流水线项目
                    def multiBranchProject = Jenkins.instance.getItemByFullName(env.JOB_NAME)
                    
                    // 过滤出所有可构建的有效分支Job(排除已失效/删除的分支)
                    def validBranchJobs = multiBranchProject.items.findAll { it instanceof Job && it.isBuildable() }
                    
                    // 遍历输出分支名称
                    echo "当前多分支流水线的有效分支列表:"
                    validBranchJobs.each { branchJob ->
                        echo "- ${branchJob.name}"
                    }
                    
                    // 可将分支列表存入环境变量供后续步骤使用
                    def branchNames = validBranchJobs.collect { it.name }
                    env.BRANCH_LIST = branchNames.join(',')
                }
            }
        }
    }
}

注意事项:

  • 脚本安全权限:默认Jenkins的脚本安全机制会阻止访问Jenkins.instance这类核心对象,你需要前往Jenkins的管理Jenkins → 脚本安全页面,批准相关方法调用(比如getItemByFullName、items等),或由管理员调整安全策略。
  • 用户权限:执行脚本的用户需要具备访问该多分支项目配置信息的权限。

方法二:调用Jenkins REST API

如果不想处理Groovy脚本的权限限制,也可以通过Jenkins的REST API获取分支列表,再在Jenkinsfile中解析返回的JSON数据。

示例代码如下:

pipeline {
    agent any
    environment {
        // 从Jenkins凭据管理中获取API用户名和Token,避免硬编码敏感信息
        JENKINS_API_CREDS = credentials('jenkins-api-auth')
    }
    stages {
        stage('通过API获取分支列表') {
            steps {
                script {
                    // 构造API请求URL,仅获取分支名称字段以减少数据传输量
                    def apiUrl = "${env.JENKINS_URL}/job/${env.JOB_NAME}/api/json?tree=items[name]"
                    
                    // 发送API请求并获取响应
                    def apiResponse = sh(
                        script: "curl -s -u ${JENKINS_API_CREDS_USR}:${JENKINS_API_CREDS_PSW} ${apiUrl}",
                        returnStdout: true
                    )
                    
                    // 解析JSON数据得到分支列表
                    def branches = new groovy.json.JsonSlurper().parseText(apiResponse).items
                    
                    // 输出分支信息
                    echo "当前多分支流水线的分支列表:"
                    branches.each { branch ->
                        echo "- ${branch.name}"
                    }
                }
            }
        }
    }
}

注意事项:

  • 凭据安全:务必使用Jenkins的凭据存储管理API用户名和Token,禁止硬编码敏感信息。
  • 网络可达性:如果构建代理运行在外部节点,需确保代理节点能够访问Jenkins的服务URL。

你可以根据自身的权限配置和使用场景,选择合适的方式在Jenkinsfile中动态获取分支列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:31:53