CruiseControl: обнаружено изменение, но временные метки в рабочей копии не изменились

Развлекайтесь и играйте с CruiseControl.

Я подключил проект Java к локальной установке CruiseControl на моем компьютере с Windows XP.

Мой файл config.xml запускается каждую минуту и ​​строит мой проект из моего ant-скрипта.

Несмотря на обнаружение изменений в магистрали на вкладке «Модификации» на панели инструментов, когда я смотрю на дату и временные метки затронутых файлов в своей рабочей копии, я замечаю, что они не изменились.

Именно с этой локальной копией работает мой build.xml, поэтому я обеспокоен тем, что, хотя мой config.xml настроен правильно, так что CruiseControl обнаруживает изменение, мой сценарий Ant не работает с рабочей копией, которая синхронизирована с Trunk. .

Я публикую свои конфигурационные файлы в надежде, что кто-нибудь заметит что-то очевидное для них, но не для меня!

XML-файл конфигурации:

<?xml version="1.0"?>
<cruisecontrol>

    <dashboard url="http://localhost:8080/dashboard" postinterval="1" />

    <project name="myProject" requireModification="false">
        <listeners>
                <currentbuildstatuslistener file="logs/myProject/status.txt"/>
            </listeners>

            <bootstrappers>
            <svnbootstrapper file="build.xml" 
            username="cruise_control" password="password" 
                localWorkingCopy="projects\myProject" />
        </bootstrappers>

        <modificationset>
            <svn repositoryLocation="https://path/to/myTrunk" 
                localWorkingCopy="projects/myProject"
                 username="cruise_control" password="password">
                </svn>
            </modificationset>

            <schedule interval="60" >
            <ant buildfile="build.xml" anthome="C:\Program Files\apache-ant-1.8.2" antWorkingDir="projects/myProject/" />
            </schedule>

        <log>
                <merge dir="C:\Program Files\CruiseControl\projects\myProject\reports\junit" pattern="TEST*.xml" />
        </log> 

        <publishers>
            <artifactspublisher dir="C:\Program Files\CruiseControl\projects\myProject\dist"
                dest="C:\Program Files\CruiseControl\artifacts\myProject"
                moveInsteadOfCopy="true"  />
        </publishers>   
    </project>
</cruisecontrol>

Конфигурационный файл панели управления:

 <dashboard>
    <buildloop
        logsdir="C:/Program Files/CruiseControl/logs/"
        artifactsdir="C:/Program Files/CruiseControl/artifacts/" />
    <features allowforcebuild="true" />
    <trackingtool projectname="" baseurl="" keywords=""/>
    <subtabs>
        <subtab class="net.sourceforge.cruisecontrol.dashboard.widgets.ErrorsAndWarningsMessagesWidget" />
    </subtabs>
</dashboard>

Заранее спасибо.


person Ben    schedule 12.01.2011    source источник


Ответы (3)


Я настроил так же, как Бен указал выше. Однако я столкнулся с двумя проблемами.

  1. Если у меня нет локальной рабочей копии в самый «первый раз», SVNBootsTrapper НЕ обновляет мой локальный рабочий каталог. Я должен либо выполнить явную «проверку svn» из командной строки, либо через скрипт ant, либо вручную переместить код в этот локальный рабочий каталог. После этого «SVN Boots Trapper» может обновить мой локальный рабочий каталог/копию с изменениями репозитория. Это то, как работает ловушка SVNBoots ИЛИ это подход, который мы должны использовать для первого репозитория для локальной рабочей копии?

2.У меня был только

<bootstrappers>
    <svnbootstrapper file="build.xml" localWorkingCopy="projects\myProject" />
</bootstrappers>

и нет поля uid/pwd. В моем старом Круизконтроле до версии 2.8.4 все работало нормально. Но тут он терпит неудачу и спрашивает меня:

ProjectController — контроллер «myProject»: событие хода сборки: начальная загрузка SVNBootstrapper — svn: не удается получить пароль

И это не удается. Единственный способ обойти эту проблему с паролем:

а. Либо добавьте атрибуты имя пользователя и пароль (как у Бена выше), ИЛИ

б. Запустите команду обновления cmd line svn, укажите uid/pwd при появлении запроса. А затем скажите «да», чтобы сохранить свой пароль «в незашифрованном виде». Есть ли способ использовать оба подхода (а) и (б) для моей второй проблемы?

person ali    schedule 21.09.2011

IIRC Cruisecontrol обнаруживает изменения в репозитории, но не обновляет рабочую копию автоматически. Таким образом, одна из возможностей заключается в том, что в вашем сценарии сборки нет кода для обновления рабочей копии с изменениями в репозитории (т. е. выполнить svn update).

person Raghuram    schedule 13.01.2011
comment
Вы правы, Рагурам. SVNBootStrapper отвечает за обновление SVN. Я неправильно настроил эту задачу. - person Ben; 13.01.2011

Я нашел проблему.

Мой загрузчик был следующим:

<svnbootstrapper file="build.xml" 
            username="cruise_control" password="password" 
                localWorkingCopy="projects\myProject" />

Со свойством «файл» svnbootsraper отслеживает только данный файл.

Когда это свойство удалено, загрузчик отслеживает всю рабочую копию:

<svnbootstrapper username="cruise_control" password="password" 
                localWorkingCopy="projects\myProject" />

Было бы распространенной ошибкой предполагать, что атрибут набора модификаций выполняет обновление SVN. На самом деле, он только прослушивает приращения к номеру редакции. Это svnbootstrapper, который выполняет обновление SVN.

Надеюсь, это поможет кому-то!

person Ben    schedule 13.01.2011
comment
На самом деле svnbootstrapper (cruisecontrol.sourceforge.net/main/) предназначен для обновления один файл (обычно build.xml), который, в свою очередь, должен запускать задачу обновления svn. То, что вы предложили, может работать, но, вероятно, неправильно. - person Raghuram; 14.01.2011
comment
Правильным способом было бы позволить сценарию ant выполнить фактическую команду обновления svn. Также обратите внимание, что набор модификаций будет игнорировать localWorkingCopy, поскольку у него уже есть расположение репозитория, и использование обоих не поддерживается. - person MatsT; 21.02.2011