2009-03-02 15 views
3

Ich versuche CruiseControl 2.7.3 (das Original) zu verwenden, um ein Java-Projekt zu erstellen, das sich in einem SVN-Repository befindet.Verwenden von SVN mit CruiseControl?

Meine Kreuzfahrtkonfiguration verwendet die svn plugin für den Modifikationssatz. Wenn eine Änderung erkannt wird, wird ein Build mit Ant geplant. Diese Ant-Build-Datei verwendet dann die svnant-Ant-Task, um eine vollständige Überprüfung des Projekts durchzuführen. Für eine Weile hatten wir diese Einstellung, um nur "HEAD" auszuchecken, aber wir hatten Fälle, in denen der Build nicht für ein oder zwei Check-in ausgelöst wird, weil das Einchecken nach der Modifikations-Set-Prüfung, aber vor dem Ant-Call erfolgte Svn Kasse. Als Ergebnis versuchen wir, die Ameise-Build-Datei so zu ändern, dass sie die Revisionsnummer verwendet, die die Änderungsprüfung abruft.

Die CruiseControl-Konfigurationsreferenzseite behauptet, dass eine Eigenschaft svnrevision festgelegt und an die Builder übergeben wird, genau wie die Eigenschaft label von labelincrementers. Es scheint nicht eingestellt zu werden, wenn ich die Taste force build drücke.

Gibt es etwas, was ich tun muss, um dies zu machen?

+0

Welches Protokoll genau? Die cruisecontrol.log, das Projektprotokoll oder das Build Log? – Steen

+0

Oh, und vielleicht würde das Hinzufügen des Tags "Subversion" zu Ihrer Frage ein paar mehr Augen in Ihre Richtung weisen? – Steen

+0

Ich werde es zu der Frage hinzufügen. –

Antwort

1

Mit Blick auf den Code für die SVN-Quellcodeverwaltung scheint es, dass svnrevision an den Builder und damit an Ihren Ant-Aufruf übergeben werden sollte. Haben Sie versucht, die Eigenschaft aus Ihrem Ant-Skript zu verwenden?

Als Antwort auf die Frage im Kommentar:

Das ist, weil in der Kraft Build Fall gibt es keine Änderung war, so gibt es keine Änderung Revisionsnummer. In diesem Fall wird der svnlabelincrementer die neueste Revisionsnummer für das, was Sie lokal haben, übergeben, was auch das Neueste sein wird.

+0

Ich habe ein Echo, um die Eigenschaft svnrevision auszudrucken. Ich habe gerade den Leckerbissen über den Force-Build-Button hinzugefügt. Ich denke, das ist das eigentliche Problem. –

+0

Das liegt daran, dass es im Fall der Force-Erstellung keine Änderungen gab, daher gibt es keine Modifikationsrevisionsnummer. In diesem Fall wird der svnlabelincrementer das Neueste für das, was Sie lokal haben, übergeben, was auch das Neueste sein wird. –

+0

Ich muss es für das Skript, das den Checkout erledigt, herumcodieren. Ich wusste nicht, dass das bis heute ein Problem war. –

0

Der Aufruf der cruisecontrol ant hat nichts mit dem (svn) Etikett zu tun, das als solches konstruiert ist. Das svn-Label wird verwendet, um die Build-Namen zu kommentieren, während das build.log wirklich nur die Ausgabe von ant ist, wenn es durch cruisecontrol geleitet wird.

Wenn Sie möchten, dass die Revisionsnummer an die Ant-Build-Ausgabe geschrieben haben, gibt es grundsätzlich zwei Möglichkeiten:

Eine Möglichkeit ist ant interact mit SVN in irgendeiner Weise zu haben. Svn in ant ist nur über eine contrib ant task von tigris erhältlich, so dass es nicht trivial ist, sie in ihre Ameisen-Datei zu packen. Aber mit diesem in Ihrem Build, könnten Sie eine svn info tun und erhalten die Revisionsnummer als Ant-Eigenschaften zu Ihrer Verfügung.

Eine andere Möglichkeit ist die Verwendung des svnlabelincrementer, um die Revisionsnummer der Beschriftung zuzuweisen und diese an das ant-Skript zu übergeben, das buildproperties verwendet, die von cruisecontrol an die Build-Skripte übergeben werden. Wie Jay in den Kommentaren erwähnt, enthält das Label nur die letzte erfolgreiche Build-Revision, was er nicht will. Ein Update wurde auf this blog vorgeschlagen, aber die Arbeit in der Ameise-Build-Datei scheint besser geeignet.

+0

Der svnlabelincrementer sendet automatisch seine $ {label} -Eigenschaft bereits. Leider ist es nicht garantiert, dass es sich nur um die neueste Überarbeitung des Arbeitspfads handelt. Sie können es also nicht in einen Aktualisierungsbefehl übergeben. –

0

Können Sie die Einstellung quietperiod verwenden? Nach einem Commit kann CruiseControl einige Zeit warten (z. B. 30 Sekunden), bevor ein Build gestartet wird.

Es werden keine einzelnen Builds für jeden Commit ausgelöst. Vielmehr werden Commits um die gleiche Zeit einen einzelnen Build starten.

+0

Wenn Sie die Quietperiode nur festlegen, wird der Build verzögert, um auf zusätzliche Checkins zu warten, die möglicherweise dem Check-in folgen, das den Build auslöst. Das war wirklich gut für CVS, aber für SVN ist es weniger nützlich. Es hilft jedoch nicht mein Problem. –