2017-05-03 104 views
5

我试图让我的分支的名称为詹金斯groovy脚本。我无法获取当前分支名称。我尝试以下操作:Jenkins管道分支名称返回null

stage('Check out code') 
checkout scm 
echo "My branch is: ${env.BRANCH_NAME}" 

这里是输出 - 它总是返回null。

Checking out Revision 33b531b2f1caaf8b64d968e437306f39d2dba1da (origin/pipeline) 
    > git.exe config core.sparsecheckout # timeout=10 
    > git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da 
[Pipeline] echo 
My branch is: null 

我错过了什么吗?

+0

尝试:'回声 “我的分支是:$ {} BRANCH_NAME”' ? –

+1

@tim_yates试着用相同的结果 – pogorman

回答

4
git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da 

这将使git的回购进入detached HEAD mode,其中,就其本质而言,没有分支。

Jenkinsfile

结账步骤将检出从源控制代码; scm是一个特殊变量,指示结帐步骤克隆触发此管线运行的特定修订。

所以${env.BRANCH_NAME}为空。

正如在“Jenkins Workflow Checkout Accessing BRANCH_NAME and GIT_COMMIT”所提到的,你可以得到你刚刚签出与常规语法(以适应在詹金斯管道DSL)的SHA1:

sh 'git rev-parse HEAD > commit' 
def commit = readFile('commit').trim() 
+0

这意味着你可以尝试猜出检出的SHA1涉及哪个分支:http://stackoverflow.com/a/1419637/6309 – VonC

11

这个变量只能在一个多分支pipline :

BRANCH_NAME 对于多分支项目,这将设置为正在构建的分支的名称,例如,如果您希望从主控部署到生产部门,而不是从功能部门分支到生产部门,

我是在一个正常的pipline

+0

好点,比我的答案更精确。 +1 – VonC

1

我的解决方法测试,不知道是不是为别人工作..

def branchName = getCurrentBranch() 
echo 'My branch is' + branchName 

def getCurrentBranch() { 
    return sh (
     script: 'git rev-parse --abbrev-ref HEAD', 
     returnStdout: true 
    ).trim() 
} 
相关问题