Jenkins checkout拉取Git分支后git rev-parse返回HEAD而非分支名如何解决
问题原因
Jenkins默认的Git拉取逻辑是直接检出目标分支对应的commit哈希值,不会自动创建和远程分支关联的本地分支,因此HEAD会处于分离状态,执行git rev-parse --abbrev-ref HEAD就会返回HEAD而非分支名。
解决方法
在GitSCM的extensions配置中添加LocalBranch扩展即可,配置后Jenkins会自动创建对应名称的本地分支并切换。
修改后的checkout配置示例:
checkout([$class: 'GitSCM', branches: [[name: br]], doGenerateSubmoduleConfigurations: false, extensions: [ [$class: 'RelativeTargetDirectory', relativeTargetDir: relative_dir], // 新增LocalBranch配置,**表示自动匹配远程分支名作为本地分支名 [$class: 'LocalBranch', localBranch: "**"] ], submoduleCfg: [], userRemoteConfigs: [[url: clone_url, credentialsId: cred_id]]])
如果需要固定本地分支名,也可以直接写死localBranch的值,比如localBranch: "demo_branch";用**可以适配不同分支的动态拉取场景,不需要每次修改分支名时同步改这里的配置。
验证
修改配置后重新执行流水线,进入工作目录执行git rev-parse --abbrev-ref HEAD会直接返回demo_branch,无需手动执行checkout命令。
内容的提问来源于stack exchange,提问作者StoneThrow
相关产品推荐
相关产品推荐

