Verwaltung separater Releases mit gemeinsamem Code

Mein Produkt hat folgende Struktur: Website, iOS, mobile Android-Apps, Backend.

Es gibt einen gemeinsamen Code, der von allen oben genannten Komponenten verwendet wird. Angenommen, Sie müssen ein Stück Code darin ändern (nur einmal an einer Stelle), damit Änderungen in allen Komponenten erscheinen.

Wenn es beispielsweise einen Fehler auf der Website gibt, der eine Änderung dieses gemeinsamen Codes erfordert, müssen wir gleichzeitig auch mobile Apps testen, um sicherzustellen, dass dort nichts kaputt geht.

Jetzt machen wir Releases nicht zu oft und wir haben alle Komponenten auf einmal veröffentlicht. Dies sieht nach einer ineffektiven Methode aus, Releases durchzuführen. Ich möchte jedes Produkt separat in seinem eigenen Tempo veröffentlichen, ohne die Qualität zu beeinträchtigen.

Irgendwelche Ideen, wie dies geschehen kann?

Antworten (3)

Als Entscheidung dieses Problems können die folgenden Schritte dienen:

Vorbereitung

  1. Verschieben Sie den allgemeinen Code unter ein Versionskontrollrepo (z. B. Git).
  2. Fügen Sie im Code aller Projekte (Android, iOS usw.) den Link zum gemeinsamen Code-Repo hinzu.
  3. Holen Sie sich für jedes Projekt die letzte aktuelle Version des gemeinsamen Codes aus dem Repo.

Tägliche Arbeit

  1. Stellen wir uns vor, wir möchten die Android-App aktualisieren, indem wir den gemeinsamen Code verbessern, und wir tun es.
  2. Dann gehen wir zum Android-App-Code und holen den letzten aktuellen gemeinsamen Code aus dem Repo.
  3. Führen Sie die erforderlichen Tests der Android-App gemäß dem aktuellen Entwicklungsfluss Ihres Teams durch.
  4. Geben Sie die Android-App mit dem neuen gemeinsamen Code frei.

Andere Arbeit

  1. Führen Sie die täglichen Arbeitsschritte für andere Projekte in Ihrer Liste aus.

Daher können Sie diese Methode nur zur Verbesserung eines Projekts verwenden, ohne Angst zu haben, Ihre anderen Projekte zu beschädigen.

Geben Sie hier die Bildbeschreibung ein

Eine der goldenen Regeln der Continuous Delivery lautet:

Wenn etwas schwierig ist, tun Sie es häufig

Im Moment befürchten Sie, dass die Veröffentlichung auf den verschiedenen Plattformen die Qualität beeinträchtigen wird. Wenn Sie diese Angst lindern können, verschwindet das Problem.

Ich würde suchen:

  • Verwenden Sie umfangreiche automatisierte Regressionstests
  • Integrieren und testen Sie häufig (vielleicht sogar mehrmals täglich)
  • Verwenden Sie Ansätze wie Feature-Toggles und Canary-Releases , um das Risiko von Releases zu verringern
  • Automatisieren Sie Ihren Freigabeprozess

Dieser Ansatz erfordert einen erheblichen Zeit- und Ressourcenaufwand, der Vorteil ist jedoch eine viel größere Flexibilität bei der Freigabe und die Fähigkeit, sich schnell an Änderungen anzupassen.

Das klingt nach einem primär codeorientierten Problem. Sie möchten, dass Komponenten Ihrer Anwendung lose gekoppelt oder vollständig entkoppelt werden. Unter Verwendung guter Programmierprinzipien wie Einzelverantwortung und Abhängigkeitsinversion wirkt sich das Ändern von etwas in einem System nicht unbedingt sofort auf alles andere aus. Unabhängig davon, ob es sich bei Ihrem gemeinsamen Code um eine Bibliothek oder eine Art Dienst handelt, können Sie von hier aus ein Versionierungsschema verwenden, um Aktualisierungen zuzulassen, die sich auf eine Plattform auswirken, aber nicht auf eine andere.