# Buildorder bzw Integration



## bygones (19. Jan 2010)

Hi,

Eine kleine Verstaendnisfrage meinerseits (und sry fuer laengeren text).

Folgendes Szenario:

Wir haben 100 Projekte, die sich grob in 10 logische Komponenten einteilen lassen.

Es soll ein CI Server laufen und den Build inkl tests ausfuehren (ant build momentan).

Nun gibt es ein paar Moeglichkeiten:

a) der CI baut die 100 Projekte + die 10 logischen Komponenten + einmal den ganzen Summs
b) der CI baut 10 die logischen Komponenten + den ganzen Summs
c) nur der ganze summs wird gebaut.

a) schliess ich aus, da den CI mit dem bauen der einzelnen Projekte zu belasten ich fuer unsinnig halte (IDE Projekte) und ja die Integration relevant ist
c) schliess ich aus, da der build sehr lange dauern kann bzw Komponenten gebaut werden, die mit der Aenderung nix zu tun haben.

soweit richtig ? einwaende ?

ok zur eigentlichen Frage:

wenn ich meine 10 logischen komponenten bauen lasse besteht jedes aus X Projekten. Wie gibt man nun am Besten dem CI an dass er A,B,D,E,C bauen soll und nicht in der Reihenfolge A,B,C,D,E oder so... 

Bisher habe ich das immer ueber ant4eclipse gemacht, der hat dann die build order ermittelt - vor allem war das fuer die Entwickler einfach, da sie sich nicht um buildkonfiguration kuemmern mussten... 

Quick-Dirty-Fix ist dem CI die Reihenfolge mitzugeben fuer die Builds.

Hilft maven hier ? angenommen man hat 100 maven projekte unterteilt in 10 logische Komponente. Gibt es dann ein Konstrukt in Maven dem ich sagen kann "Hier sind 10 Projekte und zu bauen sind sie in Reihenfolge 3,5,1,2,6..."


Etwas wirr... aber vielleicht versteht wer meine Intesion


----------



## kama (19. Jan 2010)

Hallo,



bygones hat gesagt.:


> Wir haben 100 Projekte, die sich grob in 10 logische Komponenten einteilen lassen.


Gehören die 100 Projekte zusammen oder sind die unabhängig voneinander ? 



> Es soll ein CI Server laufen und den Build inkl tests ausfuehren (ant build momentan).


CI Server ist eine gute Idee....
Ant ist eine andere Frage...



> a) der CI baut die 100 Projekte + die 10 logischen Komponenten + einmal den ganzen Summs
> b) der CI baut 10 die logischen Komponenten + den ganzen Summs
> c) nur der ganze summs wird gebaut.


Das hängt ganz von den Abhängigkeiten der Projekte und den Komponenten untereinander ab....



> a) schliess ich aus, da den CI mit dem bauen der einzelnen Projekte zu belasten ich fuer unsinnig halte (IDE Projekte) und ja die Integration relevant ist


Genau für das Bauen ist doch der CI server (oder eventuelle mehrere) genau da...



> c) schliess ich aus, da der build sehr lange dauern kann bzw Komponenten gebaut werden, die mit der Aenderung nix zu tun haben.


Du schreibst "kann". Weißt Du denn wie lange eine Build dauern wird ? Ich vermute nein...



> soweit richtig ? einwaende ?


Einen CI Server zu belasten ist genau wofür er da ist...wenn es zu viel wird muss man eben mehrere Knoten verwenden (z.B. Hudson kann das)...



> wenn ich meine 10 logischen komponenten bauen lasse besteht jedes aus X Projekten.


Hm...bin gerade etwas verwirrt...Ich dachte Projekte bestehen aus Komponenten...wobei man dann eventuelle ja nachdem wie die Komponenten geschnitten sind, einige in anderen Projekten wiederverwenden kann...



> Wie gibt man nun am Besten dem CI an dass er A,B,D,E,C bauen soll und nicht in der Reihenfolge A,B,C,D,E oder so...


Beim Hudson kannst Du dass per Abhängigkeiten machen...das ist aber echte Handarbeit...und wehe Deine Abhängigkeiten ändern sich einmal....na dann prost mahlzeit...



> Bisher habe ich das immer ueber ant4eclipse gemacht, der hat dann die build order ermittelt - vor allem war das fuer die Entwickler einfach, da sie sich nicht um buildkonfiguration kuemmern mussten...


Hm...ist ein Weg...



> Quick-Dirty-Fix ist dem CI die Reihenfolge mitzugeben fuer die Builds.


Genau die gleiche Idee wie oben...



> Hilft maven hier ? angenommen man hat 100 maven projekte unterteilt in 10 logische Komponente. Gibt es dann ein Konstrukt in Maven dem ich sagen kann "Hier sind 10 Projekte und zu bauen sind sie in Reihenfolge 3,5,1,2,6..."


Wenn Du Maven verwendest, beschreibst Du schlicht und ergreifend Deine Abhängigkeiten der Projekte/Componenten untereinander...Die Reihenfolge bestimmt Maven dann selbst...Das macht das Leben recht einfach....

Ich halte Maven in der Zwischenzeit für die einzige realistische Lösung im Großen...(auch wenn es enige Kritik an Maven gibt...)...

Bei Maven definiere ich die Verwendeteten Sachen (Libs, Frameworks) und die Abhängigkeiten untereinander...dann habe ich zum einen eine definierten Build-Lifecycle...Das ganze wird noch mit einem entsprechenden Eclipse Plugin Unterstützt....

MfG
Karl Heinz Marbaise


----------



## bygones (19. Jan 2010)

erstmal danke fuer die antwort... 

noch n paar kommentare



kama hat gesagt.:


> Gehören die 100 Projekte zusammen oder sind die unabhängig voneinander ?


die stellen ein Produkt dar. In Hinsicht Projektabhaendigkeiten sind manche unabhaengig voneinander



kama hat gesagt.:


> Genau für das Bauen ist doch der CI server (oder eventuelle mehrere) genau da...


fuer mich war der CI immer fuer die integration da... einen CI mit 100+ einzelprojekten empfinde ich dennoch komisch



kama hat gesagt.:


> Du schreibst "kann". Weißt Du denn wie lange eine Build dauern wird ? Ich vermute nein...


oh glaub mir ich kenns schlimmer... 100 projekte ist eine rundezahl von mir... bei unserem momentan CI laufen Produkte mit knapp 500 Projekten...



kama hat gesagt.:


> Hm...bin gerade etwas verwirrt...Ich dachte Projekte bestehen aus Komponenten...wobei man dann eventuelle ja nachdem wie die Komponenten geschnitten sind, einige in anderen Projekten wiederverwenden kann...


Eine komponente kann aus mehreren Projekten bestehen: xxxService / xxxServiceImpl / xxxUI / xxxUIImpl / xxxMessages etc. D.h. man hat verschiedene physikalische Eclipseprojekte, die aber zur komponente xxx gehoeren.
Es gibt gegeben durch die Projekt abhaengigkeiten zu anderen Projekten aus anderen Komponenten dann natuerlich auch Abhaengigkeiten zw. Komponenten



kama hat gesagt.:


> Beim Hudson kannst Du dass per Abhängigkeiten machen...das ist aber echte Handarbeit...und wehe Deine Abhängigkeiten ändern sich einmal....na dann prost mahlzeit...


genau das will ich eben vermeiden...



kama hat gesagt.:


> Wenn Du Maven verwendest, beschreibst Du schlicht und ergreifend Deine Abhängigkeiten der Projekte/Componenten untereinander...Die Reihenfolge bestimmt Maven dann selbst...Das macht das Leben recht einfach....
> 
> Ich halte Maven in der Zwischenzeit für die einzige realistische Lösung im Großen...(auch wenn es enige Kritik an Maven gibt...)...
> 
> Bei Maven definiere ich die Verwendeteten Sachen (Libs, Frameworks) und die Abhängigkeiten untereinander...dann habe ich zum einen eine definierten Build-Lifecycle...Das ganze wird noch mit einem entsprechenden Eclipse Plugin Unterstützt....


kenn mich mit maven nicht wirklich aus, daher wusste ich das nicht. Dachte immer ich kann nur Artefakte als Abhaengigkeiten definieren und nicht zu bauende Projekte.

wenn das so ist dann ist das natuerlich ein favorisierter weg... 

danke dir nochmal

PS: Um eine moegliche Diskussion aus dem Weg zu gehen... hier soll es nicht um die Struktur der projekte gehen... es geht mir darum die Struktur so gut wie moeglich zu bauen.


----------



## kama (19. Jan 2010)

Hallo,



bygones hat gesagt.:


> die stellen ein Produkt dar. In Hinsicht Projektabhaendigkeiten sind manche unabhaengig voneinander


Da ging meine Frage hin...Das ist wie ich es vermutet hatte...



> fuer mich war der CI immer fuer die integration da... einen CI mit 100+ einzelprojekten empfinde ich dennoch komisch


Hm...ja ok...aber der CI soll ja immer dann loslaufen und bauen wenn ich einem Module etwas geändert habe und soll auch die abhängigen Projekte/Module entsprechend bauen....




> kenn mich mit maven nicht wirklich aus, daher wusste ich das nicht. Dachte immer ich kann nur Artefakte als Abhaengigkeiten definieren und nicht zu bauende Projekte.


Wenn man es ganau nimmt ist das auch so...aber ein Artefakt ist doch etwas was auch einer Komponente (Source-Code) entsteht (z.B. jar file)...

MfG
Karl Heinz Marbaise


----------



## bygones (22. Jan 2010)

danke Karl Heinz fuer die antworten.

mittlerweilen habe ich mich gg Maven und fuer Gradle entschieden... aber danke fuer die Hinweise


----------

