我可以用下面的命令替换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
'''
1条答案
按热度按时间k2fxgqgv1#
在Jenkins文件的
script
块中,你已经有了groovy语言,所以你可以使用groovy语义。因此,如果你在
script
块上下文中,你可以删除前缀并设置新的环境变量: