如何在jenkins管道步骤中替换子串?

gcmastyq  于 2023-10-17  发布在  Jenkins
关注(0)|答案(1)|浏览(171)

我可以用下面的命令替换bash中的子字符串。然而,相同的命令在步骤中的Jenkins管道shell脚本中不起作用。基本上,在Jenkins中,${GIT_分支}返回'origin/docker'。我想在URL中使用分支名称'docker',同时将部署工件上传到JFrog工件。但是,我不想在路径中包含'origin/'字符串。
工作Bash命令:

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

user@localhost MINGW64 ~
$ GIT_BRANCH_NAME="${GIT_BRANCH/origin\/}"

user@localhost MINGW64 ~
$ echo $GIT_BRANCH_NAME
docker

Jenkins文件脚本:

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

我在Jenkins管道执行日志中看到的错误:

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

正在添加工作脚本块。现在env变量'GIT_分支_NAME'只返回'docker'而不是'origin/docker'。此外,添加了一些语句来处理各种类型的分支,如'bugfix/feature/hotfix/release'等。

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-')
}
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
'''
k2fxgqgv

k2fxgqgv1#

在Jenkins文件的script块中,你已经有了groovy语言,所以你可以使用groovy语义。
因此,如果你在script块上下文中,你可以删除前缀并设置新的环境变量:

String gitBranchName = env.GIT_BRANCH.replaceFirst('^origin/', '')
withEnv(["GIT_BRANCH_NAME=${gitBranchName}"]) {
   ...                
}

相关问题