Набор модификации CruiseControl не выполняется, когда svn указывает на URL
В моей текущей настройке CruiseControl я запускаю следующую цель:
<modificationset quietperiod="30">
<svn RepositoryLocation="http://my/url/repo/trunk" />
</modificationset>
Я делаю простую регистрацию пустого текстового файла, и впоследствии сообщения, которые я получаю в журнале CruiseControl, выглядят следующим образом:
[cc]May-13 15:53:56 Project - Project mine: bootstrapping
[cc]May-13 15:53:56 jectController- mine Controller: build progress event: bootstrapping
[cc]May-13 15:53:56 Project - Project mine: checking for modifications
[cc]May-13 15:53:56 jectController- mine Controller: build progress event: checking for modifications
[cc]May-13 15:53:59 Project - Project mine: No modifications found, build not necessary.
[cc]May-13 15:53:59 Project - Project mine: idle
[cc]May-13 15:53:59 jectController- connectfour Controller: build progress event: idle
[cc]May-13 15:53:59 Project - Project mine: next build in 1 minutes
[cc]May-13 15:53:59 Project - Project mine: waiting for next time to build
[cc]May-13 15:53:59 jectController- mine Controller: build progress event: waiting for next time to build
Черепаха: TortoiseSVN 1.6.8, сборка 19260 - 32-битная, 2010/04/16 20:20:11
КруизКонтроль: 2.8.3
3 ответа
Может быть, вам нужна локально проверенная версия репозитория, чтобы CruiseControl было с чем сравнивать, чтобы он мог обнаруживать изменения?
То, как мы делаем это в нашей настройке CruiseControl:
У нас есть начальная процедура проверки, которая проверяет все необходимые проекты для сборки. Для этого мы используем скрипт / командный файл, который работает напрямую с svn из командной строки.
Затем мы используем следующее в нашем установочном файле CruiseControl:
<modificationset quietperiod="60">
<svn username="${svn.user}"
password="${svn.password}"
localWorkingCopy="${dir.checkout}/db4oj" />
</modificationset>
Для каждого проекта, который мы проверяем, у нас есть одна запись svn, как указано выше в наборе модификаций.
Свойство dir.checkout будет указывать на конкретный путь в файловой системе.
Просто чтобы дать вам еще одно назначение данных, я попробовал это с моей (довольно старой) настройкой CruiseControl, и это сработало.
- CruiseControl v2.5
- Сервер Subversion v1.5.5 (r34862)
- Apache 2.0
Я использовал URL-адрес svn: //, поэтому изменил URL-адрес http, чтобы он соответствовал вашему тесту, перезапустил круиз-контроль. Некоторое время ждал (я отвлекся на час), затем внес изменения в один из моих файлов в SVN. Вскоре после этого началась новая сборка, вызванная модификацией в SVN.
РЕДАКТИРОВАТЬ: Чтобы уточнить, мой круиз-контроль был мониторинг SVN на что-то вроде svn://buildserver/svnrepo/project
, Ваш OP упоминает, используя http URL. Чтобы приблизиться к вашему тестовому сценарию, я также хотел использовать http-URL. Я подключил SVN через Apache, поэтому я просто изменил URL, который я использовал, чтобы Apache представлял репозиторий SVN, например http://devserver/svn/svnrepo/project
чтобы приблизиться к вашему тестовому сценарию.
Я хочу показать, что то, что вы пытаетесь сделать, работает.
Вот санированный фрагмент из моего CruiseControl config.xml
файл. Я использую Maven (1.1beta3!) Для сборки. Крик, этот материал старый, но работает.
<project buildafterfailed="false" name="someproject-int">
<plugin name="svn" classname="net.sourceforge.cruisecontrol.sourcecontrols.SVN">
</plugin>
<plugin name="svnbootstrapper" classname="net.sourceforge.cruisecontrol.bootstrappers.SVNBootstrapper">
</plugin>
<labelincrementer separator="_" defaultLabel="rev_1"/>
<bootstrappers>
<currentbuildstatusbootstrapper file="p:/build/cc-logs/someproject-int/status.txt">
</currentbuildstatusbootstrapper>
</bootstrappers>
<modificationset>
<svn repositoryLocation="http://dev/svn/project/trunk"
localWorkingCopy="p:/build/checkout/int/project"
username="build" password="****">
</svn>
</modificationset>
<schedule interval="300">
<maven goal="scm:svn-update-project|compile"
projectfile="p:/build/checkout/int/project/project.xml"
mavenscript="d:/Programs/build/Maven-1.1b3/bin/maven.bat">
</maven>
</schedule>
<log dir="p:/build/cc-logs/project" encoding="ISO-8859-1">
</log>
<publishers>
[...]
</publishers>
</project>
У меня нет полного ответа, но вот что вы можете попробовать:
- Включите отладочный вывод из CruiseControl, он будет распечатывать фактические команды, выпущенные движком CruiseControl.
- Затем вы сможете повторно запустить команды вручную и проверить их вывод.
РЕДАКТИРОВАТЬ:
Добавление простой конфигурации log4j:
log4j.logger.net.sourceforge.cruisecontrol.sourcecontrols=DEBUG
в результате в журнал CruiseControl добавляется не так много сообщений. Еще достаточно, чтобы узнать, что svn
команда выполнена. В моих журналах я видел:
2010-05-17 20:57:16,808 [BuildQueueThread] INFO BuildQueue - now adding to the thread queue: test1
2010-05-17 20:57:16,821 [Thread-22] INFO Project - Project test1: bootstrapping
2010-05-17 20:57:16,821 [Thread-22] INFO jectController- test1 Controller: build progress event: bootstrapping
2010-05-17 20:57:16,821 [Thread-22] INFO Project - Project test1: checking for modifications
2010-05-17 20:57:16,821 [Thread-22] INFO jectController- test1 Controller: build progress event: checking for modifications
2010-05-17 20:57:16,828 [Thread-22] DEBUG SVN - Executing command: svn log --non-interactive --xml -v -r {2010-05-16T22:00:00Z}:{2010-05-17T18:57:16Z} http://localhost/svn/SomeProject/
Теперь, если я выполнил ту же команду вручную, я получаю "пустой" XML:
$ svn log --non-interactive --xml -v -r {2010-05-16T22:00:00Z}:{2010-05-17T18:57:16Z} http://localhost/svn/SomeProject/
<?xml version="1.0"?>
<log>
</log>
... в отличие от более широкого диапазона времени, например:
$ svn log --non-interactive --xml -v -r {2001-01-01T01:00:00Z}:{2010-05-17T18:57:16Z} http://localhost/svn/SomeProject/
[...]