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

如何在Jenkins Pipeline中替换子字符串处理GIT_BRANCH变量

Jenkins Pipeline中Bash字符串替换命令失效的解决方法

在Bash环境中,可通过以下命令将origin/docker格式的分支名提取出docker部分:

user@localhost MINGW64 ~
$ echo $GIT_BRANCH
origin/docker

$ GIT_BRANCH_NAME="${GIT_BRANCH/origin\/}"

$ echo $GIT_BRANCH_NAME
docker

但将相同命令直接放到Jenkins Pipeline脚本中时:

GIT_BRANCH_NAME="${GIT_BRANCH/origin\/}"

会触发Groovy编译错误,日志如下:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:    
WorkflowScript: 38: unexpected char: '\' @ line 38, column 53.
       ANCH_NAME="${GIT_BRANCH/origin\/}

原因是Jenkins Pipeline基于Groovy解析,反斜杠会被Groovy当作转义符处理,导致Bash的字符串替换语法无法正常识别。

正确解决方案

通过Groovy的字符串替换方法先处理分支名,再将结果存入环境变量,后续在Shell步骤中直接使用该变量即可。同时该方案还支持处理bugfix/、feature/等其他分支前缀:

script {
    env.GIT_BRANCH_NAME = ""
    String gitBranchName = env.GIT_BRANCH.replaceFirst('^origin/', '')
    env.GIT_BRANCH_NAME = gitBranchName.replaceFirst('^bugfix/', 'bugfix-')
    env.GIT_BRANCH_NAME = gitBranchName.replaceFirst('^feature/', 'feature-')
    env.GIT_BRANCH_NAME = gitBranchName.replaceFirst('^hotfix/', 'hotfix-')
    env.GIT_BRANCH_NAME = gitBranchName.replaceFirst('^release/', 'release-')
}

之后在Shell步骤中使用GIT_BRANCH_NAME变量完成制品上传:

sh '''
    mv ${GIT_COMMIT}.zip app_${GIT_BRANCH_NAME}_${GIT_COMMIT}.zip
    curl -u JFROG_USR:JFROG_PSW -T app_${GIT_BRANCH_NAME}_${GIT_COMMIT}.zip "some-jfrog-artifctory-url/${BUILD_NUMBER}/app_${GIT_BRANCH_NAME}_${GIT_COMMIT}.zip;git.branch.name=${GIT_BRANCH};git.commit.id=${GIT_COMMIT};jenkins.build.url=${BUILD_URL}"
    rm -rf app_${GIT_BRANCH_NAME}_${GIT_COMMIT}.zip
'''

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:44:51