par8o beschleunigt Rails CI-Builds mit Semaphore Boosters um das Achtfache

  • ⛔️ Tests begannen 2 Stunden oder länger zu dauern
  • ⛔️ Das manuelle Einrichten von parallelen Tests war mühsam und zeitaufwendig
  • ✅ 8x schnelleres CI mit Semaphore Boosters
  • ✅ Vollständig automatisiertes paralleles CI

Probieren Sie Semaphore aus

Die Herausforderung

An einem bestimmten Punkt begannen die Tests auf den Entwickler-Laptops von par8o über 2 Stunden oder länger zu dauern. Mit der Hinzufügung weiterer Tests erhöhte sich die Zeit noch weiter. Par8o begann, die Parallel-Job-Funktion von Semaphore zu nutzen, um Tests auf mehrere Test-Builder zu verteilen. Das Ziel war es, ein Test-Feedback für einen Branch in weniger als einer Stunde zu erhalten. Mit parallelen Jobs konnten sie alle Tests in etwa 50 Minuten durchführen.

Obwohl sie das Ziel erreicht hatten, wollte das Team ein noch schnelleres Test-Feedback, um zu vermeiden, bei einem Build-Fehler nach 50 Minuten wieder zum Branch zurückkehren zu müssen. Das Team hoffte, dass sie durch manuelle Parallelisierung der Tests die Build-Zeit im Laufe der Zeit auf etwa 25 Minuten reduzieren könnten.

An einem Punkt gelang es ihnen, alle Tests in etwa 30 Minuten durchzuführen. Das manuelle Organisieren der Tests in Ordner war jedoch mühsam, da es schwierig war, die Ordner so zu benennen, dass sie für andere Entwickler sinnvoll waren. Anschließend mussten sie den Branch mit der neuen Ordnerstruktur in alle anderen Branches, die sich in der Entwicklung befanden, zusammenführen. Schließlich wurde ein neuer Job in Semaphore hinzugefügt, um die Tests in den neuen Ordnern durchzuführen. Es bestand auch das Risiko, dass ein neuer Testordner hinzugefügt wurde, ohne den entsprechenden Job zu erstellen, was dazu führte, dass nicht alle Tests ausgeführt wurden. Wenn ein neuer Ordner hinzugefügt wurde, um dies zu verhindern, trat ein Testfehler auf.

Obwohl die Testzeit drastisch verkürzt wurde, war das manuelle Einrichten von parallelen Tests mühsam und zeitaufwendig. Hier kamen die Semaphore Boosters ins Spiel.

Die Lösung

Da das par8o-Team Semaphore nutzte, trat es mit dem Semaphore-Support in Kontakt, um neue Funktionen oder Updates für von den Build-Servern verwendete Pakete anzufordern. Zu einem bestimmten Zeitpunkt bot der Semaphore-Support eine Lösung zur Reduzierung der Build-Zeit von par8o an, die damals im Durchschnitt 50 Minuten betrug.

Die Lösung war Semaphore Boosters — eine Ruby-Gem, die die Testzeiten für eine bestimmte Datei aufzeichnet und mithilfe dieser Zeitinformationen die Tests in mehrere Befehle aufteilt, basierend auf der Anzahl der Jobs, die ausgeführt werden sollen. Das Ziel ist, dass jeder Job ungefähr gleich lange dauert. Semaphore unterstützt derzeit Boosters für RSpec- und Cucumber-Tests.

Die manuelle Parallelisierungsstrategie funktionierte, war jedoch fragil und erforderte eine regelmäßige Neustrukturierung der Testdateien, sobald ein Job zu viel Zeit in Anspruch nahm. Da die langsamsten Tests von par8o die RSpec-Browser-Tests waren und Boosters für RSpec verfügbar ist, entschied sich das Team, sie auszuprobieren.

Die Ergebnisse

Nach der Einführung von Boosters beträgt die Build-Zeit der gesamten Testsuite von par8o durchschnittlich etwa 13 Minuten. Boosters ermöglicht es den par8o-Entwicklern, schneller Ergebnisse für ihre Testsuite zu erhalten, und spart gleichzeitig die Zeit, die sie zuvor damit verbrachten, Dateien zu verschieben, um Tests auf verschiedene Builder zu verteilen.

Schnelleres Feedback von den Tests reduziert die Wahrscheinlichkeit, dass Entwickler während der Wartezeit auf Testergebnisse zu einer anderen Aufgabe wechseln müssen. Wenn der Build fehlschlägt, können sie die notwendigen Korrekturen schneller vornehmen, solange die Änderungen noch frisch im Gedächtnis sind. Das spart Zeit und mentale Energie und ermöglicht es den Entwicklern, sich auf die Erledigung der ursprünglichen Aufgabe zu konzentrieren.

Mit sehr wenig Aufwand konnte das par8o-Team die RSpec-Browser-Tests parallelisieren, sodass die durchschnittliche Laufzeit von über 2 Stunden auf 13 Minuten gesenkt wurde. Wenn Sie RSpec oder Cucumber für Ihre Tests verwenden, probieren Sie Boosters aus.

Branche

Gesundheitswesen

Ingenieurteam

10 Personen

Technologie-Stack

Ruby on Rails

Angular

MiniTest

RSpec

Star us on GitHub