par8o beschleunigt Rails CI-Builds mit Semaphore Boosters um das Achtfache
😔 Vor Semaphore:
- ⛔️ Tests begannen 2 Stunden oder länger zu dauern
- ⛔️ Das manuelle Einrichten von parallelen Tests war mühsam und zeitaufwendig
😄 Nach der Einführung von Semaphore:
- ✅ 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.
“Durch die Verwendung von parallelen Jobs haben wir die Testdateien in Ordner organisiert, die lose auf Funktionen basierten, und konnten alle Tests in insgesamt etwa 50 Minuten durchführen. Obwohl wir unser Ziel erreicht hatten, wollten wir schnelleres Test-Feedback für unsere Branches erhalten, um zu vermeiden, dass wir nach 50 Minuten bei einem Build-Fehler wieder zu einem Branch zurückkehren müssen.”

Kendal Miller,
Senior Engineer bei par8o
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.

par8o ist eine Plattform, die für Gesundheitsteams entwickelt wurde, um Patientenzuweisungen zu koordinieren, zu kommunizieren und abzuschließen – für bessere Beziehungen zu Anbietern und Patienten. par8o bietet außerdem eine Chat-Plattform, die die Kommunikation zwischen Praxen und bei Überweisungen fördert, um schnellere Ergebnisse zu erzielen.
www.par8o.com
Branche
Gesundheitswesen
Ingenieurteam
10 Personen
Technologie-Stack
Ruby on Rails
Angular
MiniTest
RSpec
Echte Ergebnisse. Echte Wirkung. 🎯📈