Активная ветка Git "(нет ветки)" на CI Hudson - PullRequest
17 голосов
/ 04 октября 2010

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

<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

Исходя из вывода консоли, Хадсон знает, что он создает ветку тем DPM-48, но переменная окружения GIT_BRANCH не установлена, и «ветвь git» возвращает git в состоянии «отсоединенный HEAD»

* (no branch)
master
DPM-48

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

Ответы [ 3 ]

33 голосов
/ 30 октября 2010

ПОСТАНОВИЛИ

Увидев комментарий Абаяра в Ошибка Гудзона 6856 , я предпринял следующие шаги:

  • Используя менеджер плагинов Hudson, я обновил свой плагин Hudson Git версии 1.1), чтобы получить исправление abayer's.
  • Используя Конфигурацию заданий Hudson, я нажал кнопку «Дополнительно» в разделе «Управление исходным кодом» -> «Ветви для сборки». Затем я изменил «Локальная ветвь для использования» на что-то, чтобы использовать для имени. Неважно, что.
  • Затем я нажал кнопку «Сохранить» и начал сборку с «Build Now»

alt text

Журнал сборки показывает

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

вместо

[workspace] $ git.exe checkout -f d6caef27759495c5714923c1ddf19551a70d6083

Это означает, что я не нахожусь в состоянии «отсоединенная голова» и поэтому могу выполнять коммиты, создавать теги и нажимать.

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

Теперь я могу помещать теги успешной сборки в мое git-репо.

10 голосов
/ 04 октября 2010

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

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

Хотя неясно, будет ли решена эта конкретная проблема (ответы предполагают, что она может действительно «работать как задумано»!),это также относится к этой версии Hudson Git Plugin , позволяющей оформить локальное отделение.


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

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

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


Как 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:

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

В этом случае это может быть связано с выпуском 7554:

GIT_BRANCH не задано, когда для сборки выбрано несколько ветвей

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

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

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

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

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

alt text

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

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

2 голосов
/ 20 января 2015

Большое спасибо за то, что поделились этим решением!

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

enter image description hereenter image description here

...