2011-01-12 81 views
0

Spaß und Spiele mit CruiseControl.CruiseControl: Geändert erkannt, aber Zeitstempel in Arbeitskopie unverändert

Ich habe ein Java-Projekt zu einer lokalen Installation von CruiseControl auf meinem Windows XP-Rechner aufgebaut.

Meine Datei config.xml wird jede Minute ausgeführt und erstellt mein Projekt aus meinem ant-Skript.

Obwohl ich Änderungen am Trunk auf der Registerkarte "Änderungen" im Dashboard feststelle, wenn ich die Datums- und Zeitstempel der betroffenen Dateien in meiner Arbeitskopie betrachte, bemerke ich, dass diese unverändert sind.

Es ist diese lokale Kopie, gegen die meine build.xml ausgeführt wird. Daher mache ich mir Sorgen, dass, während meine config.xml korrekt konfiguriert ist, dass CruiseControl eine Änderung erkennt, mein Ant-Skript nicht gegen eine Arbeitskopie ausgeführt wird synchronisiert mit dem Trunk.

Ich poste meine Konfigurationsdateien mit der Hoffnung, dass jemand da draußen etwas entdeckt, was für sie offensichtlich ist, aber nicht für mich!

Config 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-Konfigurationsdatei:

<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> 

Vielen Dank im Voraus.

Antwort

0

IIRC Cruisecontrol erkennt Änderungen am Repository, aktualisiert die Arbeitskopie jedoch nicht automatisch. Eine Möglichkeit besteht also darin, dass Ihr Build-Skript nicht über den Code zum Aktualisieren der Arbeitskopie mit den Änderungen im Repository verfügt (z. B. eine svn update).

+0

Sie haben Raghuram korrekt. SVNBootStrapper ist verantwortlich für die SVN-Aktualisierung. Ich hatte diese Aufgabe nicht richtig konfiguriert. – Ben

0

Ich habe das Problem gefunden.

Mein Bootstrap war wie folgt:

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

Mit der "Datei" Eigenschaft, svnbootsraper nur die angegebene Datei überwacht.

Wenn diese Eigenschaft entfernt wird, überwacht das Bootstrap-Programm die gesamte Arbeitskopie:

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

Es erscheinen würde ein häufiger Fehler zu sein, man davon ausgehen, dass das modificationset Attribut ein SVN-Update durchführt. In der Tat, es lauscht nur auf Inkremente zur Revisionsnummer. Ist der Svnbootstrapper, der das SVN-Update durchführt.

Hoffe das hilft jemandem!

+0

Eigentlich svnbootstrapper (http://cruisecontrol.sourceforge.net/main/configxml.html#svnbootstrapper) soll eine einzelne Datei (in der Regel build.xml) aktualisieren, die wiederum eine Svn-Update-Task ausführen sollte. Was Sie vorgeschlagen haben, funktioniert vielleicht, ist aber wahrscheinlich nicht korrekt. – Raghuram

+0

Der "richtige" Weg wäre, das ant-Skript den eigentlichen Befehl svn update ausführen zu lassen. Beachten Sie auch, dass das Modificationset die localWorkingCopy ignoriert, da es bereits über eine repositoryLocation verfügt und beide nicht unterstützt werden. – MatsT

2

Ich konfigurierte den gleichen Weg wie Ben oben erwähnt. Ich stieß jedoch auf zwei Probleme.

  1. Wenn ich keine lokale Arbeitskopie habe, die das "erste Mal" ist, aktualisiert der SVNBootsTrapper mein lokales Arbeitsverzeichnis NICHT. Ich muss entweder eine explizite "svn checkout" von der Kommandozeile oder über ant-Skript ausführen oder manuell den Code in dieses lokale Arbeitsverzeichnis verschieben. Danach kann der "SVN Boots Trapper" mein lokales Arbeitsverzeichnis/Kopie mit Repository-Änderungen aktualisieren. Funktioniert das SVNBoots-Trapper-System ODER ist dies der Ansatz, den wir für die erstmalige Speicherung von lokalen Arbeitskopien verwenden müssen?

2.I hatte nur

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

und keine uid/PWD Feld. In meinem alten Cruisecontrol vor 2.8.4 Version würde es gut funktionieren. Aber auch hier scheitert es und fragt mich:

ProjectController - 'myProject' Controller: Fortschritt Ereignis bauen: Bootstrapping SVNBootstrapper - svn: Kann nicht durch ein Passwort bekommen

Und es funktioniert nicht. Die einzige Lösung für dieses Passwortproblem ist:

a. Fügen Sie entweder die Attribute username und password hinzu (wie Ben oben) ODER

b. Führen Sie einen Befehl cmd line svn update aus, und geben Sie bei Aufforderung die Option uid/pwd an. Und dann Ja sagen, um Ihr Passwort "unverschlüsselt" zu speichern. Gibt es einen Weg, beide Ansätze (a) und (b) zu meinem zweiten Problem zu verwenden?