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

Jenkins Pipeline作业如何设置分支名变量 解决BRANCH_NAME返回null问题

问题原因

env.BRANCH_NAME返回null的核心原因是:该变量是Jenkins 多分支流水线(Multibranch Pipeline) 类型任务专属的自动注入环境变量,普通单分支Pipeline任务、自由风格任务默认不会注入这个变量,直接读取自然返回null。

不同场景下的正确配置方法
  • 场景1:使用多分支流水线任务
    这类任务不需要手动定义分支变量,Jenkins会在构建触发时自动为env.BRANCH_NAME赋值为当前构建对应的分支名,直接读取使用即可,参考脚本:

    node{
        // 多分支流水线自动注入变量,可直接调用
        echo "当前构建分支:${env.BRANCH_NAME}"
    }
    

    注意不要在脚本全局作用域提前定义同名局部变量覆盖环境变量,避免取值异常。

  • 场景2:使用普通单分支Pipeline任务
    这类任务默认没有自动注入的分支名变量,需要在拉取代码的步骤执行完成后,手动解析获取分支名,常用实现方式有3种:

    1. 通过checkout步骤的返回值解析
      Git插件执行完拉取动作后会返回SCM元信息,从中截取分支名即可:
    node{
        // 先执行代码拉取
        def scmMeta = checkout scm
        // Git返回的分支名带refs/heads/前缀,需要截掉
        def BRANCH_NAME = scmMeta.GIT_BRANCH.replaceFirst('refs/heads/', '')
        echo "当前构建分支:${BRANCH_NAME}"
    }
    
    1. 通过Git命令直接获取
      拉取代码后执行原生Git命令读取当前分支,兼容性最好:
    node{
        checkout scm
        // 执行git命令拿短分支名,trim()用来去掉命令输出末尾的换行符
        def BRANCH_NAME = sh(script: 'git rev-parse --abbrev-ref HEAD', returnStdout: true).trim()
        echo "当前构建分支:${BRANCH_NAME}"
    }
    
    1. 读取构建参数
      如果你的任务配置了分支选择类的构建参数(比如参数名为BRANCH),可以直接读取参数值作为分支名:
    node{
        def BRANCH_NAME = params.BRANCH
        echo "当前构建分支:${BRANCH_NAME}"
    }
    
注意事项

不要在node块外、checkout步骤执行前尝试读取分支名变量,此时还未完成代码拉取、SCM元信息还未生成,会出现取值为null的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:30:54