Получение git имени ветки в приглашении или Android gradle: на Jenkins возвращается HEAD

В gradle я хотел бы добавить как текущее имя ветки, так и номер фиксации в качестве суффикса к моей версииName. (Почему? Потому что, когда я создаю свое приложение в Jenkins, чтобы выпустить его в HockeyApp, полезно показать, какая ветка и зафиксировать это приложение было построено!)

Поэтому, когда я ввожу это в командной строке, возвращается мое текущее имя ветки:

git rev-parse --abbrev-ref HEAD

То же самое происходит, когда я использую эту строку в Android gradle, используя код в этом, или как показано в этом фрагменте кода gradle:

def getVersionNameSuffix = { ->

    def branch = new ByteArrayOutputStream()
    exec {
        // The command line to request the current branch:
        commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD'
        standardOutput = branch
    }
    println "My current branch: " + branch
    def versionNameSuffix = "-" + branch

    // ... some other suffix additions ...

    return versionNameSuffix
}

buildTypes {
    debug {
        applicationIdSuffix ".test"
        versionNameSuffix getVersionNameSuffix()
    }
}

Результирующий журнал (это именно то, что я хочу):

"Моя текущая ветка: feature/MyFeature"

Однако, когда я создаю свое приложение в задании Дженкинса, он выдаст другой результат:

"Моя текущая ветка: HEAD"

Почему это происходит и как правильно получить мое текущее название ветки в Jenkins?

EDIT:

Я использовал другой подход, который в большинстве случаев возвращает имя branchName, также в Jenkins:

git name-rev --name-only HEAD

Пример вывода в командной строке:

"Моя текущая ветка: feature/MyFeature"

Пример вывода в Jenkins:

"Моя текущая ветка: пульты/происхождение/функция/MyFeature"

Я могу удалить "remotes/origin/", если мне нравится, так что все в порядке!

Но этот подход вызывает разные проблемы (как в подсказке, gradle, так и в Jenkins). Когда я пометил последнее коммит, он не выведет имя ветки, но это:

"Моя текущая ветка: tags/MyTag ^ 0"

ИЗМЕНИТЬ 2:

Третий подход можно найти здесь.

Включая комментарии ниже ответа, я могу использовать grep * для получения приглашения в ветке. Однако я не могу использовать обратную косую черту в коде gradle. Это не удается:

commandLine 'git', 'branch', '|', 'grep', '\\*'

Любые советы?

Ответы

Ответ 1

Попробуйте env: BRANCH_NAME

BRANCH_NAME 
    For a multibranch project, this will be set to the name of the branch being built, for example in case you wish to deploy to production from master but not from feature branches.

Доступ к нему с помощью env.BRANCH_NAME