Ich habe die langen Bauzeiten satt …
Ich interessiere mich für ein verteiltes Build-System, entweder auf der unteren Ebene, auf der das Äquivalent von make ausgeführt wird und nichts anderes als Abhängigkeitsregeln bekannt ist, oder auf der höheren Ebene von etwas wie CMake oder SCons. Das System muss (sich bemühen) alle Kerne auf einer Gruppe von Maschinen zu nutzen.
Angenommen, ich habe die folgenden Quellen, Zwischenziele und Endziele:
und nehmen wir an, das Bauen von jedem davon nimmt viel Zeit in Anspruch, und ich habe zwei Maschinen.
Das Build-System wird einen Maschinen-Build b0 und einen zweiten Maschinen-Build b1 haben, dann einen Maschinen-Build b2 und einen weiteren Maschinen-Build b3 – und es wird sicherstellen, dass nur die relevanten Quellen so schnell wie möglich kopiert/auf relevanten Maschinen verfügbar gemacht werden, nicht kurz nachdem vorherige Vermittler fertig sind. Und es wird diese Abhängigkeiten bestimmen, indem es sich die Quelldatei und minimale zusätzliche Informationen ansieht, die ich bereitstelle - ähnlich wie bei CMake+make.
Muss:
Sollte:
Kann oder kann nicht:
Klingt so, als würden Sie tatsächlich mehrere Tools benötigen, zum Beispiel:
Wählen Sie ein Befehlszeilentool aus, um Builds zu automatisieren, die ausgeführt werden, wenn Sie „./build.sh“ (Linux) oder „build.cmd“ (Windows) eingeben.
ant
- Nicht nur für Java, sondern wirklich ein leistungsstarkes Ökosystem mit vielen Plugins, fast jede Build- und Bereitstellungsaufgabe, die Sie automatisieren müssen, kann damit automatisiert werden. Bietet keine Web-Benutzeroberfläche oder einen Planungsdienst, sodass Sie ihn in etwas anderem verwenden können.
make
oder cmake
- für Leute auf Systemebene mit vielen Abhängigkeiten und mindestens etwas C oder C++ - für Leute der alten Schule mit mindestens etwas C oder C++.
"RemObjects Train": https://github.com/remobjects/train - für Leute, die Linux-, Mac- und Windows-Produkte erstellen und dafür Javascript verwenden möchten.
Wählen Sie jetzt ein webbasiertes Continuous-Integration-Tool aus, um den Build zu planen oder automatisch auszuführen, wenn jemand Code eincheckt:
A. jenkins
- Der große Kerl da draußen. Außerdem gibt es Hudson, von dem Jenkins eine Gabelung ist, aber ich denke, Hudson ist im Grunde tot. Frei.
B. GitLab CI
- Ein Neuling, aber wirklich praktisch, wenn Sie möchten, dass Ihre automatischen Builds immer dann ausgeführt werden, wenn jemand auf ein Git-Repo pusht, und Sie die Wahl haben möchten, den Git-Server selbst zu hosten oder ihn im Internet zu haben, das ist großartig Auswahl. Und frei.
Erstellen Sie jetzt Jenkins-Jobs für gemeinsam genutzte Komponenten. Verteilen Sie diese Artefakte jetzt auf die Sekundärstufen. Finden Sie selbst parallele Build-Möglichkeiten und bauen Sie Ihre Jenkins-Tasks, damit es eine "Pipeline" gibt. Verteilte Builds erfordern menschlichen Einfallsreichtum zum Entwerfen und optimieren nicht selbst und entdecken und verteilen binäre Zwischenprodukte nicht selbst.
Was meiner Ansicht nach an Ihrer Anfrage falsch ist, ist, dass Sie sich das Web-Ding als eine "Ebene" Ihres Build-Systems und Ihr Befehlszeilen-Build-Tool als eine weitere Ebene vorstellen müssen.
Beschränken Sie sich auch nicht auf nur ein Build-Tool. Vielleicht brauchen Sie CMake, damit Sie neu bauen können, libffmpeg
und Sie werden brauchen ant
, damit Sie einige Jars neu bauen können, und Sie werden python
und bash
Skripte brauchen, um einige Dinge zu tun, die auf diese Weise am besten zu sein schienen.
Es gibt kein Build-Tool, das sie alle beherrscht, genauso wie in großen Systemen selten nur eine Sprache, ein Compiler oder Editor verwendet wird. Kleinere, zusammensetzbare Tools ergeben bessere Systeme als „ein Tool, um sie alle zu beherrschen“-Tools.
Keine perfekte Lösung, aber das Distributed Plugin von CruiseControl ermöglicht eine rudimentäre Form der Build-Verteilung:
[...] ermöglicht es einem Master-Build-Rechner, Build-Anforderungen an andere physische Rechner zu verteilen, auf denen die Builds ausgeführt werden, und die Ergebnisse an den Master zurückzugeben.
Ihr Build-Skript sieht folgendermaßen aus:
<distributed>
<ant antscript="ant.bat"
antworkingdir="C:/cruise-control-agent/checkout/BasicJavaProject" >
</ant>
</distributed>
Die Ant-Aufgabe wird nicht auf dem Computer ausgeführt, auf dem CruiseControl („Master“) ausgeführt wird, sondern von einem der verfügbaren Agentencomputer (separate Computer, auf denen eine bestimmte Agentensoftware ausgeführt wird).
Sie können Agenten so filtern, dass eine bestimmte Aufgabe beispielsweise nur auf einem Linux 64-Bit-Agenten ausgeführt wird.
Unterstützte Sub-Build-Befehle: ant, maven, maven2, nant, phing, rake, exec, pipedexec, xcode
Schwachstelle: Abhängigkeiten werden vom System nicht aufgelöst. Sie müssen sie selbst finden und dann Ihr Build-Skript entsprechend schreiben.
Kostenlos, Open-Source.
Mawg sagt, Monica wieder einzusetzen
einpoklum
Nikolaus Raul
einpoklum
Mawg sagt, Monica wieder einzusetzen
Mawg sagt, Monica wieder einzusetzen
Nikolaus Raul
einpoklum
einpoklum
atp9
einpoklum
atp9
Nikolaus Raul