Ошибка журнала Git в настройке непрерывной интеграции PhpUnderControl - PullRequest
8 голосов
/ 04 февраля 2010

Итак, я настроил следующее для моего проекта PHP:

  • Хранилище Git со всем кодом.
  • Экземпляр Cruisecontrol с запущенным поверх него PhpUnderControl.

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

Проблема, с которой я столкнулся в проекте Platform, выглядит в журналах ошибок следующим образом:

2010-02-04 06:07:27,076 [Thread-14061] INFO  Project           - Project platform:  bootstrapping  
2010-02-04 06:07:27,077 [Thread-14061] INFO  ProjectController - platform Controller: build progress event: bootstrapping  
2010-02-04 06:07:27,496 [Thread-14061] INFO  GitBootstrapper   - Already up-to-date.  
2010-02-04 06:07:27,500 [Thread-14061] INFO  Project           - Project platform:  checking for modifications  
2010-02-04 06:07:27,500 [Thread-14061] INFO  ProjectController - platform Controller: build progress event: checking for modifications  
2010-02-04 06:07:27,583 [Thread-14063] WARN  Git               - warning: Log for '' only goes back to Tue, 26 Jan 2010 13:43:11 -0500.  
2010-02-04 06:07:27,584 [Thread-14063] WARN  Git               - fatal: Invalid revision range @{ 1264038932}..@{ 1265281647}  
2010-02-04 06:07:27,584 [Thread-14061] INFO  Project           - Project platform:  No modifications found, build not necessary.  
2010-02-04 06:07:27,584 [Thread-14061] INFO  Project           - Project platform:  idle  
2010-02-04 06:07:27,584 [Thread-14061] INFO  ProjectController - platform Controller: build progress event: idle

Странная вещь в том, что когда я проверяю каталог проекта, база кода обновляется. (Я протестировал с несколькими небольшими коммитами в моем рабочем каталоге.) Проблема в том, что он никогда не запускает другие процессы сборки, так как выдает ошибки 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 ]

1 голос
/ 04 марта 2011

Быстрое исправление:

Самый простой и быстрый способ исправить это - установить 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 @ {timestamp} .. @ {timestamp}

например: git log -p --pretty = raw @ {1292455850} .. @ {1299108639}

Основная проблема заключается в том, что параметр передается в первую метку времени, cruisecontrol делает именно то, для чего он запрограммирован, но мы просим его проверить изменения между датами, о которых наш репозиторий не имеет, если requireModification = " true ", то он отключится, не найдя изменений!

1 голос
/ 15 февраля 2010

Похоже, что для git нет проверки на ветвь. Я не знаю, как исправить это сразу, но это может быть направлением.

...