Активная ветвь Git - "(без ветки)" на hudson CI

Мой Ant build.xml script начинается с

<property environment="env"/>
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo>
<echo>PWD = ${env.PWD}</echo> 

Hudson CI настраивается для создания, когда изменяется какая-либо ветка. Консольный выход...

Commencing build of Revision 90906a63929e9074035eb5b10c71ee055ad3e13c (origin/DPM-48)
GitAPI created
Checking out Revision 90906a63929e9074035eb5b10c71ee055ad3e13c (origin/DPM-48)
[workspace] $ git.exe checkout -f 90906a63929e9074035eb5b10c71ee055ad3e13c
[workspace] $ cmd.exe /C '"C:\Program Files\WinAnt\bin\ant.bat" -file build.xml ...'
 [echo] GIT_BRANCH = ${env.GIT_BRANCH}
 [echo] PWD = /cygdrive/d/.hudson

Из вывода консоли, Hudson знает, что он создает ветку темы DPM-48, но переменная среды GIT_BRANCH не установлена, и 'git branch' возвращает, что git находится в состоянии "отсоединенного HEAD"

* (no branch)
master
DPM-48

То, что я хочу знать, - это какая ветка, на которой я строю хадсон. Должен быть способ сделать это.

Ответ 1

ПОСТАНОВИЛИ

После просмотра комментария abayer в Hugson error 6856, я сделал следующие шаги:

  • Используя Hudson Plugin Manager, я обновил свой Hudson Git Plugin версии 1.1), чтобы получить исправление от пользователя.
  • Используя конфигурацию заданий Хадсона, я нажал кнопку "Дополнительно" в разделе "Управление исходными кодами" → "Филиалы для сборки". Затем я изменил "Local branch to use" на то, что нужно использовать для имени. Неважно, что.
  • Затем я нажал кнопку "Сохранить" и начал сборку с помощью "Строить сейчас"

alt text

В журнале сборки отображается

[workspace] $ git.exe checkout -b ChangeTester d6caef27759495c5714923c1ddf19551a70d6083

Вместо

[workspace] $ git.exe checkout -f d6caef27759495c5714923c1ddf19551a70d6083

Это означает, что я не состою в состоянии "отдельной головы" и поэтому могу совершать, создавать теги и нажимать.

Я могу использовать 'git rev-parse HEAD', чтобы получить хеш фиксации и найти в выводе 'git show-ref', чтобы найти реальное имя ветки, если мне это нужно.

Теперь я могу использовать успешные теги построения для своего репозитория Git.

Ответ 2

Примечание: комментарий OP milkplus относится к недавнему Ошибка Hudson 6856 (июнь 2010 г.), в котором говорится:

Git строит с отсоединенной головкой независимо от того, что

Пока неясно, будет ли эта конкретная проблема решена (ответы предполагают, что она может "работать как запроектированная"!), она также относится к этой версии hudson Git Плагин, позволяющий проверить локальную ветвь.


Вы находитесь в DETACHED HEAD, потому что, поскольку плагин Git работает прямо сейчас, он сделал checkout непосредственно commit SHA1, а не ветвь HEAD.

Состояние, в котором вы находитесь, пока ваш HEAD отсоединен, не записывается ни одной веткой (что естественно - вы не находитесь в какой-либо ветке). Это означает, что вы можете отменить свои временные коммиты и слияния, переключившись на существующую ветвь.

Ваше здание script может сначала попытаться найти, из какой ветки происходит соответствующая фиксация.


Поскольку OP milkplus реализован, посмотрев исходный код Hudson Git Плагин:

public void buildEnvVars(AbstractBuild build, java.util.Map<String, String> env) {
    super.buildEnvVars(build, env);
    String branch = getSingleBranch(build);
    if(branch != null){
        env.put(GIT_BRANCH, branch);
    }
}

Установлена ​​переменная среды GIT_BRANCH, но она не имеет никакого значения в структуре xml script:

<property environment="env"/>
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo>

Если это так, это может быть из-за issue 7554:

GIT_BRANCH не устанавливается, когда для сборки

выбрано несколько ветвей.
  

При попытке определить, в какой ветке текущая сборка включена, я обнаружил, что переменная среды GIT_BRANCH не установлена, когда больше выделено одна ветвь.

  
  

На самом деле это не ошибка, как функция, я думаю - GIT_BRANCH env var задается только в том случае, если есть одна ветвь, поэтому не имеет значения, если/когда имеется несколько ветвей. Я не уверен, как мы будем форматировать env var для нескольких ветвей в этом контексте.

Я думал, что GIT_BRANCH должен быть установлен ветвью, которая в настоящее время строится. Например, если сборка находится на главном, она будет содержать мастер.

Это поможет, например, нажать на другой пульт, который был создан во время этой сборки. Или Запуск другой сборки с правильным набором ветвей, которые будут созданы.

Вид зеркала NPE, описанный здесь

alt text

По какой-то причине плагин Git начал передавать значение null для переменной среды GIT_BRANCH.
Это вызвало отказ плагина Maven в вызове System.getProperties().putAll(systemProps).

Решением было использовать "master" как ветвь Git по умолчанию, а не "**" или пустую строку.

Ответ 3

Благодарим вас за это решение!

У меня возникли проблемы с поиском этого необязательного диалога для установки локальной ветки - и показать другим, что это также по-прежнему является текущим подходом и в 2015 году я хотел бы приложить скриншот текущих диалогов gui jenkins.

enter image description hereenter image description here