在Jenkins Pipeline / Jenkinsfile中获取git分支名称

时间:2017-02-22 05:18:40

标签: git jenkins branch jenkins-pipeline

我已经创建了一个jenkins管道,它正在从scm中提取管道脚本 我将分支说明符设置为“all”,因此它建立在对任何分支的任何更改上。

如何从Jenkinsfile访问导致此构建的分支名称?

我尝试过的所有内容除了

外都回显了
sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()

总是master

11 个答案:

答案 0 :(得分:27)

使用multibranch管道..而不是管道

在我的剧本中..

stage('Build') {
    node {
        echo 'Pulling...' + env.BRANCH_NAME
        checkout scm

    }
}

...产量

Pulling...master

答案 1 :(得分:13)

如果您的管道有jenkins文件,请检查您是否在执行时看到environment variables中的分支名称。

您可以使用以下方式打印它们:

pipeline {
    agent any

    environment {
        DISABLE_AUTH = 'true'
        DB_ENGINE    = 'sqlite'
    }

    stages {
        stage('Build') {
            steps {
                sh 'printenv'
            }
        }
    }
}

但是,PR 91表明分支名称仅在某些管道配置中设置:

答案 2 :(得分:7)

一位同事告诉我使用scm.branches[0].name并且它有效。我将它包装到Jenkinsfile中的函数中:

def getGitBranchName() {
    return scm.branches[0].name
}

答案 3 :(得分:6)

对于管道:

pipeline {
  environment {
     BRANCH_NAME = "${GIT_BRANCH.split("/")[1]}"
  }
}

答案 4 :(得分:5)

切换到多分支管道允许我访问分支名称。没有建议定期管道。

答案 5 :(得分:4)

这是针对简单管道类型的-不是多分支。使用Jenkins 2.150.1

environment { FULL_PATH_BRANCH = "${sh(script:'git name-rev --name-only HEAD', returnStdout: true)}" GIT_BRANCH = FULL_PATH_BRANCH.substring(FULL_PATH_BRANCH.lastIndexOf('/') + 1, FULL_PATH_BRANCH.length()) }

然后使用它env.GIT_BRANCH

答案 6 :(得分:2)

这对我来说很有效:(使用Jenkins 2.150,使用简单的管道类型-不是多分支,我的分支说明符:'**')

echo 'Pulling... ' + env.GIT_BRANCH

输出:

Pulling... origin/myBranch

其中myBranch是功能分支的名称

答案 7 :(得分:2)

要在 Jenkins 中获取 git 分支名称, 如果是多分支管道,那么我们可以轻松使用env.GIT_BRANCH。 但是如果是普通的pipeline那么我们可以使用SCM插件对象来获取分支名称。

以下代码适用于普通管道和多分支管道。

def branch_nem = scm.branches[0].name
if (branch_nem.contains("*/")) {
    branch_nem = branch_nem.split("\\*/")[1]
    }
echo branch_nem

答案 8 :(得分:1)

这对非多分支管道对我有用,可以将 SCM Branch Specifier (blank for 'any') 设置为 */branch_name 或将其设置为仅 branch_name

BRANCH_NAME = "${GIT_BRANCH.split('/').size() > 1 ? GIT_BRANCH.split('/')[1..-1].join('/') : GIT_BRANCH}"

答案 9 :(得分:0)

如果您将build参数用作分支说明符,例如,仅从scm.branches获得名称是不够的。 ${BRANCH}。 您需要将该字符串扩展为真实名称:

scm.branches.first().getExpandedName(env.getEnvironment())

请注意,getEnvironment()必须是显式的获取器,否则env将查找名为 environment 的环境变量。

别忘了您需要批准这些方法以使它们可以从沙箱中访问。

答案 10 :(得分:0)

FWIW在PR版本中唯一对我有用的是${CHANGE_BRANCH}

(可能不适用于master,尚未看到)

相关问题