21

Ich untersuche gerade ein gutes Setup für einen Continuous Integration Server, der verschiedene C++ Anwendungen für mehrere Linux-Distributionen erstellen würde.Continuous Integration Server für C++ - Was ist mit Bibliotheksabhängigkeiten?

Meine primäre Frage ist, wie andere Benutzer hier die Unterschiede in Systembibliotheken zwischen Linux-Distributionen behandelt haben?

Während es relativ einfach sein kann, direkte Abhängigkeiten wie UI-Bibliotheken zusammen mit einer Anwendung zu erstellen, scheinen "indirekte" Abhängigkeiten wie glibc ein großer Schmerz zu sein, wenn sie jedes Mal neben der Anwendung erstellt werden müssten. Ich denke daher daran, die tatsächliche Erstellungsausführung in eine separate virtuelle Maschine für jede Verteilung zu verschieben, z. Verwenden Sie rlogin, um die Befehle auszuführen. Mein Ziel ist es, binäre Inkompatibilitäten zwischen Build-Maschinen-Bibliothek-Versionen und denen in den Ziel-Distributionen bereitgestellten zu verhindern.

Hat jemand hier irgendwelche Erfahrung mit einem solchen Prozess und könnte sagen, ob das obige klingt wie ein praktikabler Ansatz?

+0

Ich würde gerne eine gute Antwort auf diese Frage sehen. Neben der ursprünglichen Frage würde ich gerne wissen, wie ich unter Linux auch mingw kompilieren kann (ich verwende mingw in Windows). Außerdem verwende ich das Qt-Framework und QTestLib für Komponententests. Vielen Dank! –

+0

Ich würde auch gerne eine gute Antwort auf diese Frage sehen.IMHO, das geht zu "Configuration Management" Probleme, da jedes Modul zu anderen Modulen "koppelt", und durch die Verknüpfung einer lib, dh Sie müssen implizit die Up-Stream-Bibliotheken verknüpfen. Da dies Lib-Versionsbeschränkungen erfordert, wird dieses Problem schnell kompliziert (z.B. DLL-Hölle oder RPM-Hölle). Indirekte Abhängigkeitsfortpflanzung ist im Zusammenhang mit beschränkten kompatiblen Versionen wesentlich. – charley

Antwort

4

Buildbot hat den Begriff buildmasters and buildslaves.

Ein buildmaster kümmert sich um die Anzeige der Web-GUI, das Senden von E-Mails, das Auslösen von Builds und andere organisatorische Maßnahmen. Die Buildslaves warten auf den Buildmaster und führen Befehle aus, wenn Builds ausgeführt werden.

Wir haben Buildbot eingerichtet, um auf einer Reihe von verschiedenen Plattformen zu bauen, einige von ihnen VMs, und es funktioniert gut für uns.

6

Wir verwenden Jenkins (zusammenhängende Integration) und CMake (Build-System) für diesen Zweck. Jenkins ist Buildbot ähnlich, d. H. Es hat auch Buildmaster und Buildslaves. Momentan habe ich 8 Slaves für 4 verschiedene Plattformen (FC8, FC10, FC12 und Windows 7) eingerichtet. Wir erstellen sowohl Debug- als auch Release-Binärdateien. Daher habe ich für jede Plattform und jeden Buildtyp einen Slave zugewiesen.

Wie für die Third-Party-Bibliotheken wie Qt & Boost, kompilierte ich sie auf jeder Plattform und überprüfte sie in einem separaten Repository.

@esavard: Wir verwenden CMake 2.8, Cross Compilation zu tun, ich habe nicht Minigw verwendet, aber eine schnelle Google-Suche zeigt, dass es möglich ist. Hier ist a link zu einem Tutorial zum Cross-Compilieren für Windows unter Linux mit CMake und miniGW.

Ich habe Buildbot nicht benutzt und kann seine Funktionen nicht kommentieren, aber ich sollte eine Alternative erwähnen, die wir gerade verwenden.

Hoffe, das hilft.

+0

+1 für CMake ... – Macke

+0

Glaubst du, ich könnte etwas ähnliches mit qmake anstelle von CMake erreichen (wir verwenden qmake jetzt und wir haben Scons vorher verwendet)? –

+0

Ich habe qmake nicht benutzt, also kann ich nicht sicher sagen, wie es funktionieren würde. [Here] (http://silmor.de/29) ist ein Link, der über Cross-Compiling von Qt-Apps für Windows unter Linux mit qmake spricht. Scons ist auch sehr gut, ich habe es ausprobiert, bevor ich mich für CMake entschieden habe. Wir gingen mit CMake wegen seiner Unterstützung für mehrere IDEs Wir haben Leute mit Eclipse, Code :: Blocks, VS05, VS10 und Emacs. Nur Probleme, die ich rannte, waren die Unterstützung von vorkompilierten Headern mit CMake. – user258808

0

Natürlich ist Buildbot und viele virtuelle Maschinen der Weg, um damit zu gehen. Wir haben VMWare ESX Server hosten viele Build-Slaves, die unsere Anwendung über Nacht kompilieren. Die Anwendung wird dann auf einer anderen virtuellen Maschine (nicht dem Build-Slave und nur mit einer Standardinstallation des Betriebssystems) getestet, um zu überprüfen, ob sie funktioniert und alle Abhängigkeiten gepackt sind.

Das Schöne, was ich tun möchte, ist, die Testlaufphase einen automatisierten Schritt zu machen, aber ich habe noch nicht die Zeit dafür bekommen.

Verwandte Themen