Das Test-Shootout zum Erstellen von Hack-Schriften: Travis CI vs. Semaphore CI

In den letzten Monaten haben wir Build-Tests der Hack-Schriftart mit den kostenlosen Open-Source-Kontoplänen verglichen, die von den fortlaufenden Integrationstests von Travis und Semaphore angeboten werden. Dieser Test war Teil einer Überprüfung unseres CI-Testansatzes für alle Source Foundry-Software-Repositorys, zu denen Open Source-Quellensoftware für Python, Go, C / C ++ und UFO-Schriftarten gehören.

Warum testen?

Das Semaphore-Team meldet eine Verkürzung der Testzeiten für die Elixir-Lang / Elixir-Testsuite um 50% im Vergleich zu den Zeiten, die auf den Testplattformen Travis CI und Circle CI beobachtet wurden. Hier ist ein Screenshot der Daten von der Zielseite von semaphore.com:

Faszinierend! Als langjähriger Benutzer von Travis CI habe ich mich entschlossen, die Testservices auf den Prüfstand zu stellen und herauszufinden, ob diese Vorteile für unsere Softwaretestanforderungen gelten. In der folgenden Analyse werden die beiden Testdienste mit denselben Git-Commits verglichen, die in das Hack-Schriftart-Repository übertragen und gleichzeitig auf beiden CI-Testplattformen über GitHub-Git-Commit-Hooks erstellt wurden.

Der Build

Der Erstellungsprozess umfasst die folgenden Schritte:

  • Installation der Python-Software zum Kompilieren und Nachkompilieren von Schriftarten mit pip
  • Kompilieren Sie die FreeType & Harfbuzz-Bibliotheken und die ausführbare Datei ttfautohint aus der C / C ++ - Quelle mit einem make-basierten Kompilierungsworkflow
  • Kompilieren von vier Schriftartvarianten mit vollem Zeichensatz (regulär, kursiv, fett und fett kursiv) in den Formaten Desktop (* .ttf) und Web-Schriftart (* .woff, * .woff2) aus UFO-Schriftart-Quelldateien der Version 2
  • Kompilieren von Schriftvarianten mit vier Teilzeichensätzen in Webschriftformaten (* .woff, * .woff2) aus UFO-Schriftart-Quelldateien der Version 2
  • Änderungen nach dem Kompilieren werden mit Anweisungssätzen (d. H. Hinweisen) in die Font-Binärdateien geschrieben.
  • Änderungen nach dem Kompilieren werden mit anderen OpenType-Tabellenkorrekturen, einschließlich DSIG-Tabellenspott, Änderung der fstype-Berechtigung, in die Schriftart-Binärdateien geschrieben

Dieser Erstellungsprozess hat in der Vergangenheit ungefähr 4 bis 5 Minuten auf der Travis-Plattform gedauert. Wir führen Parallel-Shell-Skript-Flusentests durch, die in dieser Analyse nicht berücksichtigt werden, da sie im Vergleich zu unseren Kompilierungstests kurz sind und keinen Einfluss auf die Gesamtzeit bis zum Abschluss des Tests haben. Die zeitintensiven Tests für uns sind in der obigen Liste aufgeführt.

Die Testplattformen

Die Travis und Semaphore Tests wurden beide auf Ubuntu 14.04 LTS Systemen durchgeführt. Die Git-Versionen waren 2.13.0 für Travis und 2.14.2 für Semaphore. Die gcc-Versionen waren 4.8.4 bei Travis und 4.9 bei Semaphore. Die Python-Versionen waren 2.7.13 unter Travis und 3.6.x unter Semaphore.

Testergebnisse

Hier finden Sie die Daten zu den Ausführungszeiten für Builds, die für fünf kürzliche sequenzielle Commits in unserem Repository erforderlich sind. Diese Daten schließen die Warteschlangenzeit aus und stellen nur die Ausführungszeit des Software-Build-Tests dar. Die Builds wurden auf beiden Testdiensten gleichzeitig über GitHub-Git-Commit-Hooks ausgeführt.

Raw-Build-Zeiten von Git-Commit

Die folgende Abbildung zeigt die unformatierte Erstellungszeit in Sekunden, die git für das Repository für Hack-Schriftarten festlegt. Die Git-Commits sind auf der y-Achse mit kurzen Hash-Strings des Git-Commits SHA1 gekennzeichnet.

Build-Zeiten (Sekunden) nach Hack-Schriftart-Repository git commit für Semaphore- (blau) und Travis-Builds (rot)

Zusammengefasste Statistiken

Mittelwert (+/- SD) für Erstellungszeiten über fünf Festschreibungen für das Hack-Schriftart-Repository für Semaphore (blau) und Travis (rot). p <0,05

In den letzten fünf Commits wurde eine statistisch signifikante (p <0,05) Verkürzung der Build-Zeit verzeichnet, die sich auf durchschnittlich 110,8 Sekunden belief, die im Semaphore CI-Service eingespart wurden. Die durchschnittliche Erstellungszeit betrug 208,6 Sekunden (+/- 16,7 Sekunden) bei Semaphore und 319,4 Sekunden (+/- 33,6 Sekunden) bei Travis. Fast zwei Minuten wurden von unseren Builds im Durchschnitt mit den standardmäßigen Semaphore-Testeinstellungen gespart! Das ist in jeder Hinsicht ziemlich beeindruckend.

Warum ist Semaphore CI schneller?

Ich habe mich an den Mitbegründer von Semaphore CI, Marko Anastasov, gewandt, um zu sehen, ob er diese Unterschiede erklären kann, und hier ist, was er zu sagen hat:

„Bei Semaphore nehmen wir die Leistung sehr ernst und unsere CI / CD-Plattform basiert auf dedizierter Hardware mit Desktop-Leistung. Infolgedessen beträgt die Hardwarekapazität eines CI-Mitarbeiters (wir nennen es eine Box) im Vergleich zu anderen Diensten das Zweifache. “

Marko hatte auch die folgende Empfehlung für zusätzliche potenzielle Gewinne in Projekten wie unserem:

"Wir empfehlen außerdem die Verwendung des integrierten Caching-Mechanismus, um zu vermeiden, dass externe Abhängigkeiten neu erstellt werden, die sich zwischen den Builds nicht ändern."

Die Dokumentation für das integrierte Semaphore-CI-Abhängigkeits-Caching, auf das er verwiesen hat, finden Sie hier.

Fazit

Basierend auf diesen Erkenntnissen und den Ergebnissen ähnlicher Analysen in unseren Python-Software-Repositorys stellen wir die meisten unserer kontinuierlichen Integrationstests in unseren Quellprojekten für Go-, Python- und UFO-Schriftarten auf Semaphore CI um. Dieser Service ist einen Blick wert für andere Teams, die relativ lange Testbuild-Prozesse haben. Mit einer einfachen Konfigurationseinstellung an Ihren Repositorys können Sie möglicherweise erhebliche Zeiteinsparungen erzielen.

Daten

Alle unsere historischen Testdaten sind offen und für die Überprüfung durch git commit auf unseren Travis und Semaphore-Konten für diejenigen verfügbar, die diese Ergebnisse verifizieren und bestätigen möchten, dass sie über die Zeit stabil waren. Die Daten für diese Analyse sind in dieser Google Text & Tabellen-Tabelle verfügbar.

  • Semaphore: https://semaphoreci.com/
  • Travis: https://travis-ci.org/