Die erste Antwort auf eine alte, kürzlich aktive Frage, die mit einem Video verknüpft ist, in dem erläutert wird, wie das Google-Repository erstellt wird.
Eine interessante Sache, die erwähnt wurde, ist die Tatsache, dass alles aus dem Quellcode erstellt wird, ohne auf Binärdateien angewiesen zu sein. Dies hilft zu vermeiden, dass Probleme mit Abhängigkeiten veraltet sind, aber immer noch in anderen Projekten verwendet werden, ein Problem, auf das ich in der Tat häufig gestoßen bin.
Wie ist es technisch möglich? Wenn ich in meinem Unternehmen dasselbe versuche, selbst wenn man die große Lücke zwischen der Größe meiner Unternehmenscodebasis und der Größe von Googles berücksichtigt, wäre dies aus zwei Gründen nicht möglich:
Die IDE (Visual Studio) reagiert schnell nicht mehr, da selbst kleine Lösungen mit beispielsweise 50 Projekten stark darunter leiden.
Jede statische Analyse würde durch die Größe der gesamten Codebasis beeinträchtigt. Beispielsweise wären Code-Metriken oder statische Überprüfungen von Code-Verträgen kaum möglich (Code-Verträge würden wahrscheinlich Tage oder Wochen dauern).
Bei kontinuierlicher Integration würde das Kompilieren ebenfalls viel Zeit in Anspruch nehmen und die Server zum Erliegen bringen, sobald ein Projekt mit vielen Abhängigkeiten geändert wird, sodass ein großer Baum von Projekten neu kompiliert werden muss.
Wie kann ein kleines Unternehmen diese Probleme umgehen und in der Lage sein:
Verwenden Sie die IDE, ohne von schlechter Leistung beeinträchtigt zu werden.
Kompilieren Sie den Code nach jedem Commit, ohne den Server zu beschädigen, auch wenn die Folgen einer Änderung erfordern, dass ein großer Teil der Codebasis neu kompiliert wird.
quelle
Antworten:
Sie gehen von einem traditionellen Erstellungsprozess aus, und der Google-Prozess ist alles andere als traditionell. Im Blog von Engineering Tools gibt es eine Reihe von Artikeln, in denen der Prozess ausführlich erläutert wird. Dabei wird auf die Präsentation von 2010 eingegangen: Tools für die kontinuierliche Integration bei Google Scale :
Zusammenfassend lässt sich sagen, dass sie ein benutzerdefiniertes verteiltes Build-System verwenden, das einen sehr hohen Grad an Parallelität und Automatisierung ermöglicht und die vorhandene Infrastruktur voll ausnutzt. Es hängt auch stark vom Caching ab, mit einer Cache-Trefferquote von 90%.
Aber wie können Sie das alles in Ihrem Unternehmen anwenden? Der erste Schritt ist das Verteilen des Kompilierens. Dazu benötigen Sie:
In einer gcc-Entwicklungsumgebung ist das Einrichten einer Kompilierungsfarm relativ einfach. distcc kümmert sich um die Verteilung und ccache kümmert sich um das Caching, und sie arbeiten wunderbar zusammen. Ich kenne keine ähnlichen Tools für das Microsoft-Ökosystem (ich gehe davon aus, dass Sie eine Microsoft-Sprache verwenden, die auf Ihrer IDE-Auswahl basiert), aber ich weiß, dass MSBuild Builds parallel ausführen kann , wobei Multi-Core-CPUs genutzt werden . Nicht wirklich eine Kompilierungsfarm, aber sicherlich ein Schritt in die richtige Richtung.
quelle
Trotzdem wäre ich vorsichtig beim "Just-in-Time-Erstellen", es sei denn, der Code, der unternehmensweit bereitgestellt wird, wurde im Rahmen eines (mehr oder weniger) formalen Veröffentlichungszyklus überprüft und ist nicht zufällig nächtlich gebaut. H.
5000 Entwickler auf 2000 Projekte zugreifen zu lassen, die sich alle im ständigen Wandel befinden, klingt nach einem Rezept für eine Katastrophe, und Google stellt sehr kluge Leute ein. Ich bin mir also ziemlich sicher, dass dies nicht der Fall ist.
quelle