Ошибка журнала Git в настройке непрерывной интеграции PhpUnderControl
Итак, я настроил следующее для моего проекта PHP:
- Git -репозиторий со всем кодом.
- Экземпляр Cruisecontrol с запущенным поверх него PhpUnderControl.
Я создал новый проект в каталоге проекта cruisecontrol и настроил средство проверки, чтобы проверять изменения в git-репо каждые 2 минуты. У меня есть 2 проекта, запущенных в этом экземпляре Cruisecontrol, и первый, который я настроил, работает просто отлично.
Проблема, с которой я сталкиваюсь в проекте Platform, выглядит в журналах ошибок следующим образом:
2010-02-04 06: 07: 27,076 [Thread-14061] INFO Project - Платформа проекта: начальная загрузка 2010-02-04 06:07:27,077 [Thread-14061] INFO ProjectController - Контроллер платформы: событие прогресса сборки: начальная загрузка 2010-02-04 06:07:27,496 [Thread-14061] ИНФОРМАЦИЯ GitBootstrapper - уже обновлено. 2010-02-04 06: 07: 27,500 [Тема-14061] Проект INFO - Платформа проекта: проверка изменений 2010-02-04 06:07:27,500 [Thread-14061] INFO ProjectController - контроллер платформы: событие прогресса сборки: проверка изменений 2010-02-04 06:07:27,583 [Thread-14063] ПРЕДУПРЕЖДЕНИЕ Git - предупреждение: Журнал для '' восходит только к вторнику, 26 января 2010 г. 13:43:11 -0500. 2010-02-04 06:07:27,584 [Thread-14063] ПРЕДУПРЕЖДЕНИЕ Git - фатально: недопустимый диапазон редакций @{ 1264038932}..@{ 1265281647} 2010-02-04 06:07:27,584 [Thread-14061] INFO Project - Платформа проекта: Модификации не найдены, сборка не требуется. 2010-02-04 06: 07: 27,584 [Тема-14061] Проект INFO - Платформа проекта: простаивает 2010-02-04 06: 07: 27,584 [Thread-14061] INFO ProjectController - контроллер платформы: событие прогресса сборки: неактивно
Странная вещь здесь в том, что когда я проверяю каталог проекта, база кода обновляется. (Я протестировал с несколькими небольшими коммитами в моем рабочем каталоге.) Проблема в том, что он никогда не запускает другие процессы сборки, так как Git выдает ошибки.
Если я пойду к projects/platform
прямо в директорию и сделайте git pull, все работает нормально. Выполнение сборки ant из каталога проекта также работает нормально.
Вот соответствующие файлы конфигурации:
<project name="platform" buildafterfailed="false">
<plugin name="git" classname="net.sourceforge.cruisecontrol.sourcecontrols.Git" />
<modificationset quietperiod="60">
<git localWorkingCopy="projects/${project.name}/" />
</modificationset>
<bootstrappers>
<gitbootstrapper localWorkingCopy="projects/${project.name}/" />
</bootstrappers>
<schedule interval="120">
<ant antscript="/usr/bin/ant" buildfile="projects/${project.name}/build.xml" />
</schedule>
<listeners>
<currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
</listeners>
<log dir="logs/${project.name}">
<merge dir="projects/${project.name}/build/logs/" />
</log>
<publishers>
<artifactspublisher dir="projects/${project.name}/build/api"
dest="artifacts/${project.name}"
subdirectory="api"/>
<artifactspublisher dir="projects/${project.name}/build/coverage"
dest="artifacts/${project.name}"
subdirectory="coverage"/>
<execute command="phpuc graph logs/${project.name} artifacts/${project.name}"/>
<execute command="phpcb
--log projects/${project.name}/build/logs
--source projects/${project.name}/lib/model
--ouput projects/${project.name}/build/php-code-browser" />
<artifactspublisher dir="projects/${project.name}/build/php-code-browser"
dest="artifacts/${project.name}"
subdirectory="php-code-browser" />
</publishers>
</project>
Мои поиски по ошибке git не дали мне хорошего понимания, так что, надеюсь, кто-то здесь знает!
2 ответа
Похоже, что для git нет проверки ветки. Я не знаю, как исправить это сразу, но это может быть направлением.
Быстрая починка:
Самый простой и быстрый способ исправить это - установить requireModification="false" в теге проекта. Подождите, пока не сработает сборка, затем снова установите requireModification="true". Это приведет к созданию новой предыдущей даты сборки, которая находится в пределах диапазона доступных изменений git-журнала.
Подробности:
Это случилось со мной, когда я повторно клонировал свои репозитории в моей среде круиз-контроля. Это создает проблему, из-за которой локальная рабочая копия журналов репозитория не возвращается к последней сборке, выполненной cruisecontrol.
Происходит следующее: ваша последняя дата сборки старше самой старой записи об изменениях в вашем локальном рабочем хранилище:(ой.
Это не происходит в gitbootstrapper. Ваш загрузчик работает просто отлично.
См.: 2010-02-04 06:07:27,496 [Thread-14061] ИНФОРМАЦИЯ GitBootstrapper - уже в актуальном состоянии.
Нет ошибок Были хороши.
Проблема сообщается Git, как выполняется ProjectController, когда он вызывает "getModification"
Увидеть:
2010-02-04 06: 07: 27,500 [Thread-14061] INFO ProjectController - контроллер платформы: событие прогресса сборки: проверка изменений
2010-02-04 06:07:27,583 [Thread-14063] ПРЕДУПРЕЖДЕНИЕ Git - предупреждение: Журнал для '' восходит только к вторнику, 26 января 2010 г. 13:43:11 -0500.
Код, выполняемый в классе Git, находится в net.sourceforge.cruisecontrol.Git.getModifications
Выполненная команда:
git log -p --pretty = raw @ {отметка времени}..@{отметка времени}
например: git log -p --pretty=raw @{1292455850}..@{1299108639}
Основная проблема заключается в том, что параметр передается в первую временную метку, cruisecontrol делает именно то, для чего он запрограммирован, но мы просим его проверить изменения между датами, о которых наш репозиторий не имеет записи, если requireModification="true", тогда он закроется, не найдя изменений!