如何在Jenkins多分支流水线中获取主作业名称?
获取Jenkins多分支流水线的主作业名称
我编写了一个Jenkins流水线脚本,需要获取多分支流水线的主作业名称——对应URL https://host:port/job/<WHAT-I-NEED>/job/<MULTI-BRANCH-NAME>/ 中的<WHAT-I-NEED>部分。尝试了以下环境变量及属性均未得到目标内容:
stage('Check environment') { steps { echo "Workspace: ${env.WORKSPACE}" echo "Job name: ${env.JOB_NAME}" echo "Job base name: ${env.JOB_BASE_NAME}" echo "Branch name: ${env.BRANCH_NAME}" echo "Build display name: ${env.BUILD_DISPLAY_NAME}" echo "Current build: ${currentBuild}" echo "Full Project display name: ${currentBuild.fullProjectName}" echo "Project display name: ${currentBuild.projectName}" echo "Change branch: ${env.CHANGE_BRANCH}" echo "Change target: ${env.CHANGE_TARGET}" } }
流水线简化输出如下:
Workspace: null Job name: <WHAT-I-NEED>/<MULTI-BRANCH-NAME> Job base name: <MULTI-BRANCH-NAME> Branch name: <MULTI-BRANCH-NAME> Build display name: #<NUMBER> Current build: org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper@30e963bc Full Project display name: <WHAT-I-NEED>/<MULTI-BRANCH-NAME> Project display name: <MULTI-BRANCH-NAME> Change branch: null Change target: null
可行解决方案
方案1:拆分env.JOB_NAME变量
从输出可见env.JOB_NAME的值为<WHAT-I-NEED>/<MULTI-BRANCH-NAME>,直接按斜杠分割取第一个元素即可:
stage('Get Main Job Name') { steps { script { def mainJobName = env.JOB_NAME.split('/')[0] echo "Main Job Name: ${mainJobName}" } } }
方案2:通过Jenkins内部对象获取父作业名称
如果担心作业名存在特殊字符(注:Jenkins实际不允许作业名包含斜杠),可通过currentBuild的层级关系获取:
stage('Get Main Job Name via Jenkins API') { steps { script { // 分支作业的父是多分支项目,多分支项目的父就是主作业 def mainJob = currentBuild.parent.parent echo "Main Job Name: ${mainJob.name}" } } }
内容的提问来源于stack exchange,提问作者Benny
相关产品推荐
相关产品推荐

