如何通过代码在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
相关产品推荐
相关产品推荐

