Zum Inhalt springen

Progressive Rollouts

Ein progressives Rollout behält den stabilen Fallback eines Kanals bei, während ein separater Rollout-Ziel an eine kontrollierte Teilmenge von Geräten ausgeliefert wird. Die meisten Produktionsnutzer bleiben auf der stabilen Version. Nur die Rollout-Gruppe erhält den Kandidaten, bis Sie Rollout abschließen oder Rollout zurückrollen.

Progressive-Rollout-Steuerung in einem Capgo-Channel
Der Progressiver Rollout Abschnitt auf dem Information-Tab eines Kanals zeigt Rollout-Ziel und Stabiler Fallback, Prozent-Steuerungen und Rollout-Aktionen.

Jeder Channel kann gleichzeitig über zwei Bundle-Links verfügen:

Console-LabelAPI / CLIWer erhält es
Stabiler FallbackStabiles Bundle (version auf Channels POST)Jedes Gerät im Channel, das es nicht in der Rollout-Kohorte ist.
Rollout-ZielRollout-Ziel (rolloutVersion / rollout_version)Nur Geräte, die Capgo zufällig in die Rollout-Gruppe auswählt, während der Rollout aktiviert aktiv und nicht pausiert ist.
  1. Das Gerät fragt Capgo nach einem Update auf seinem Channel.
  2. Wenn der Rollout deaktiviert, oder es gibt kein Ziel, liefert Capgo das stabilen Fallback.
  3. Wenn der Rollout aktiviert und pausiert, behalten Geräte, die bereits in der Kohorte sind, das Rollout-Ziel; alle anderen erhalten den stabilen Fallback.
  4. Wenn der Rollout aktiviert und nicht pausiert ist, prüft Capgo, ob dieses Gerät zur Rollout-Kohorte gehört:
    • In der Kohorte → Rollout-Ziel.
    • Nicht in der Kohorte → stabiler Fallback.

Capgo trifft für jedes berechtigte Gerät eine Zufallsentscheidung und cached diese anhand eines Hashes aus Device-ID und Rollout-ID. Das macht die Kohorte sticky für die konfigurierte Cache-Dauer, statt bei jedem Update-Check neu zu würfeln.

Ein Rollout braucht zuerst einen stabilen Fallback. Weise im Dashboard das stabile Bundle zu, bevor du das Rollout-Target wählst. Mit der Öffentliche Channels APIkann ein bestehender Channel bereitstellen version und rolloutVersion in derselben POST-Anfrage.

Um die Auslieferung zu starten:

  1. Setze den Rollout-Ziel (oder ein Bundle hochladen/zuteilen – siehe Bundles hochladen und zuweisen).
  2. Wähle eine Prozentsatz und klicke auf Prozentsatz anwenden.
  3. Klicken Rollout aktivieren.

Solange der Rollout nicht aktiviert ist, ändert die Konfiguration von Zielgruppe und Prozentsatz nichts daran, was Geräte erhalten.

Ändere in der Console den Prozentsatz und klicke auf Prozentsatz anwenden um ihn zu speichern. Capgo behält bestehende Entscheidungen nach Möglichkeit bei:

  • Prozentsatz erhöhen — bereits ausgewählte Geräte bleiben ausgewählt; es wird nur eine zufällige Teilmenge bisher nicht ausgewählter Geräte hinzugefügt.
  • Prozentsatz verringern — eine zufällige Teilmenge der ausgewählten Kohorte kehrt zum stabilen Fallback zurück.
  • Prozentsatz auf 0% setzen — keine neuen Geräte werden ausgewählt. Geräte, die bereits das aktivierte Rollout-Ziel ausführen, erhalten dieses weiterhin, bis Sie es deaktivieren, zurückrollen oder ändern.
  • Rollout pausieren — verhindert, dass neue Geräte hinzukommen, während Geräte, die bereits das aktivierte Ziel ausführen, darauf bleiben.
  • Rollout deaktivieren — stoppt die Auflösung des Rollout-Ziels; Update-Checks verwenden den stabilen Fallback.

Auf Kanälen mit progressives Rollout konfiguriert, gehen neue Uploads und Bundle-Links an den Rollout-Ziel standardmäßig. Stabiler Fallback bleibt unverändert, es sei denn, Sie entscheiden sich ausdrücklich, es zu ersetzen.

Channel-StatusStandard-Upload / ZuweisungStabiler FallbackRollout-Ziel
Nein progressiver Rollout konfiguriertLandet im ChannelAuf den Upload gesetztn. v.
Progressives Rollout konfiguriertLandet im ChannelUnverändertAuf den Upload gesetzt
Wie du das Bundle auslieferstStabiler FallbackRollout-ZielNotizen
bundle upload --channel <name> (keine zusätzlichen Flags)Unverändert in Rollout-Channels; Setzen wenn kein Rollout erfolgtSetzen Sie in Rollout-ChannelsEntspricht dem Console-Standard.
bundle upload --channel <name> --rollout <percent>UnverändertSetzen Sie; Rollout aktiviert bei diesem ProzentsatzUpload in einem Schritt + Aktivierung.
bundle upload --channel <name> --stableErsetztUnverändertNotausgang – gezielte stabile Ersetzung.
bundle upload mit nein --channelUnverändertUnverändertNur registrieren; verknüpfen mit channel set oder API.
Console-Link-Dialog → Auto (empfohlen)Unverändert auf Rollout-KanälenSetzen Sie in Rollout-ChannelsStandardauswahl.
Console-Link-Dialog → Rollout-ZielUnverändertSetzen SieExplizites Rollout-Ziel.
Console-Link-Dialog → Stable ersetzenErsetztUnverändertNotausgang.
PUT /bundle/ mit target: "auto"Unverändert auf Rollout-KanälenSetzen Sie in Rollout-ChannelsAPI Standard.
PUT /bundle/ mit target: "rollout"UnverändertSetzen SieExplizites Rollout-Ziel.
PUT /bundle/ mit target: "stable"ErsetztUnverändertNotausgang.
channel set --bundle <version>ErsetztUnverändertExpliziter Stable-Override.
channel set --rollout-bundle <version> (+ --rollout-percentage, --rollout-enable)UnverändertGesetzt oder geändertTarget konfigurieren ohne Upload.
Kanäle POST versionErsetzt wenn gesetztUnverändertExpliziter Stable-Override.
Kanäle POST rolloutVersionUnverändertGesetzt oder geändert wenn gesetztProgrammatische Target-Zuweisung.

Standard-Upload auf einem Channel mit Rollout-Konfiguration (Rollout-Ziel; Stable bleibt unverändert):

Terminalfenster
bunx @capgo/cli@latest bundle upload com.example.app \
--path ./dist \
--channel production

Upload, Rollout-Ziel festlegen und auf 5 % aktivieren:

Terminalfenster
bunx @capgo/cli@latest bundle upload com.example.app \
--path ./dist \
--channel production \
--rollout 5

Stable explizit ersetzen:

Terminalfenster
bunx @capgo/cli@latest bundle upload com.example.app \
--path ./dist \
--channel production \
--stable

Hochladen ohne Verknüpfung, dann Rollout konfigurieren:

Terminalfenster
bunx @capgo/cli@latest bundle upload com.example.app --path ./dist -b 1.3.0
bunx @capgo/cli@latest channel set production com.example.app \
--rollout-bundle 1.3.0 \
--rollout-percentage 5 \
--rollout-enable

API mit explizitem Ziel zuweisen (auto | stable | rollout):

Terminalfenster
curl -X PUT \
-H "authorization: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"app_id": "com.example.app",
"version_id": 456,
"channel_id": 789,
"target": "rollout"
}' \
https://api.capgo.app/bundle/

Exposition erhöhen, ohne bereits ausgewählte Geräte neu zuzuweisen:

Terminalfenster
bunx @capgo/cli@latest channel set production com.example.app \
--rollout-percentage 25

Nutzt --rollout-percentage-bps wenn du feinere Schritte als ganze Prozentwerte brauchst (zum Beispiel 50 = 0.5%).

Siehe den Channel CLI Referenz und bundle CLI Referenz für jede Rollout-Option. Die Console-UX erscheint in capgo.app#3313.

App öffnen → Kanäle → Kanal auswählen → Informationen → Progressiver Rollout.

Der Abschnitt zeigt Rollout-Ziel und Stabiler Fallback für die beiden Bundle-Links. Verwende Rollout-Ziel ändern um ein anderes Kandidaten-Bundle auszuwählen. Nach der Änderung des Prozentsatzes klickst du auf Prozentsatz anwenden zum Speichern.

KontrolleWas es bewirktGeräte, die bereits in der Kohorte sindNeue berechtigte Geräte
Rollout-Ziel ändernLegt fest rolloutVersion. Eine Änderung startet eine neue Rollout-ID und eine neue Kohorte. Das Hochladen oder Zuweisen eines Bundles zum Channel (Standard) setzt ebenfalls das Rollout-Ziel.Das vorherige Ziel beibehalten, bis sie erneut einchecken und den neuen Entscheidungsregeln entsprechen.Wird anhand des Prozentsatzes für das neue Ziel ausgewählt.
Prozentsatz anwendenSpeichert den eingegebenen Prozentsatz.Bleibt beim Erhöhen erhalten; beim Verringern kann eine zufällige Teilmenge wegfallen.Hinzugefügt oder ausgeschlossen gemäß den obigen Prozentregeln.
Rollout aktivierenAktiviert die Rollout-Auslieferung für das konfigurierte Ziel und den Prozentsatz.Keine sofortige Änderung bis zum nächsten Update-Check.Kann beim nächsten Check ausgewählt werden.
Rollout pausierenVerhindert den Einstieg neuer Geräte.Im Rollout-Ziel bleiben.Stabilen Fallback erhalten beim nächsten Check.
Rollout fortsetzenPause aufheben.Unverändert.Kann beim nächsten Check erneut ausgewählt werden.
Rollout deaktivierenDas Rollout-Ziel wird nicht mehr aufgelöst; Capgo nutzt den stabilen Fallback für alle.Zum stabilen Fallback wechseln beim nächsten Check.Stabilen Fallback erhalten.
Rollout abschließen (API: promoteToStable; CLI: --rollout-promote)Macht das Rollout-Ziel zum neuen stabilen Fallback und löscht den Rollout-Status. Bestätigt durch Progressiven Rollout abschließen? — das Ziel wird für alle stabil, der vorherige stabile Fallback wird ersetzt und der Prozentsatz wird zurückgesetzt.Als stabilen Fallback übernehmen for everyone.Das fertige Bundle erhalten als stabil.
Rollout zurückrollen (API: rollback; CLI: --rollout-rollback)Löscht das Ziel, deaktiviert den Rollout, setzt den Prozentsatz auf 0 % zurück und schickt Geräte zum stabilen Fallback zurück.Zurück zum stabilen Fallback beim nächsten Check.Stabilen Fallback erhalten.

Nur eine Terminal-Aktion gleichzeitig verwenden (Rollout abschließen und Rollout zurückrollen können nicht in einem einzigen API-Aufruf kombiniert werden):

Terminalfenster
# Stop adding devices while you investigate
bunx @capgo/cli@latest channel set production com.example.app --rollout-pause
# Allow new devices to enter again
bunx @capgo/cli@latest channel set production com.example.app --rollout-resume
# Complete rollout — candidate becomes stable for everyone
bunx @capgo/cli@latest channel set production com.example.app --rollout-promote
# Rollback rollout — discard candidate and return to stable
bunx @capgo/cli@latest channel set production com.example.app --rollout-rollback

Halte das Rollout-Ziel-Bundle verfügbar, bis du Rollout abschließen oder Rollout zurückrollen. Bundles, die als stabiler Fallback oder Rollout-Ziel verknüpft sind, sind vor dem Löschen geschützt.

Progressive Rollouts sind so konzipiert, dass du in der Produktion validieren kannst, ohne den gesamten Kanal auf einmal umzustellen. Eine praktische Abfolge:

  1. Stabile Fallback-Gesundheit bestätigen. Es sollte die Version sein, die Sie den meisten Nutzern weiterhin bereitstellen möchten.
  2. Laden Sie den Kandidaten in den für Rollouts konfigurierten Channel hoch (bundle upload --channel <name> landet auf Rollout-Ziel und lässt Stabiler Fallback unverändert) oder verwenden Sie --rollout <small-percent> um die Exposure im selben Schritt zu aktivieren.
  3. Klein anfangen — 1–5 % reichen für das erste Signal aus. Klicken Sie auf Prozentsatz anwenden, dann Rollout aktivieren. Aktiviere Auto-Pause, wenn Capgo die Auslieferung stoppen soll, sobald die Fehlerraten in die Höhe schnellen.
  4. Erst überwachen, dann ausweiten. Nutzt Observe für Version Health, Log-Insights für Fehlermuster und den Channel Verlauf Tab für Konfigurationsänderungen. Vergleiche das Rollout-Ziel mit dem stabilen Fallback; erhöhe den Prozentsatz erst, wenn die Kohorte gesund aussieht.
  5. Schrittweise erhöhen — ändere den Prozentsatz und klicke Prozentsatz anwenden, und steigere sie schrittweise (z. B. 5 % → 25 % → 50 % → 100 %). Capgo behält die bereits in der Kohorte ausgewählten Geräte bei, wenn du erhöhst.
  6. Rollout abschließen, wenn du sicher bist — bestätigen Progressiven Rollout abschließen? damit der Candidate für alle zum stabilen Fallback wird.
  7. Falls etwas schiefläuft: Rollout zuerst pausieren — stoppt neue Auslieferungen, während du untersuchst. Geräte, die schon auf dem fehlerhaften Build sind, bleiben dort, bis du Rollout zurückrollen oder Rollout deaktivieren.

Capgo kann einen aktivierten Rollout alle fünf Minuten auswerten und eingreifen, sobald das Fehlersignal deinen Schwellenwert überschreitet. Gemessen werden Installs und Fehler für das Rollout-Ziel im gewählten Channel und Zeitfenster; bewertet wird dabei mit einer unteren Wilson-Konfidenzgrenze statt nur mit der rohen Failure-Rate.

Auto-pause ist standardmäßig deaktiviert. Konfiguriere diese Felder in den Channel-Einstellungen: Informationen Tab oder mit channel set:

  • Fehlerraten-Schwellenwert in Basispunkten (500 = 5 %). Ein Schwellenwert ist erforderlich, damit die Policy ausgelöst wird.
  • Zeitfenster in Minuten (Standard: 60).
  • Konfidenz zwischen 0 und 1 (Standard: 0.95).
  • Optionale Mindestanzahl an Versuchen und Fehlschlägen, um Reaktionen auf zu kleine Stichproben zu vermeiden.
  • Cooldown in Minuten (Standard: 60), was wiederholte Aktionen verhindert.
  • Aktion: pause, rollback, oder notify.

pause stoppt den Rollout für neue Nutzer, rollback löscht das Ziel und kehrt zum stabilen Fallback zurück, und notify sendet einen Rollout-Alert, ohne die Rollout-Auslieferung zu ändern.

Terminalfenster
bunx @capgo/cli@latest channel set production com.example.app \
--auto-pause-enabled \
--auto-pause-failure-rate-bps 500 \
--auto-pause-window-minutes 60 \
--auto-pause-confidence 0.95 \
--auto-pause-min-attempts 100 \
--auto-pause-min-failures 5 \
--auto-pause-action pause \
--auto-pause-cooldown-minutes 120
  • Dashboard: App → Kanäle → Channel → Informationen → Progressiver Rollout
  • Kanäle API: Öffentliche Channels API für Rollout-Felder, Promote und Rollback
  • Bundle-Zuweisung API: PUT /bundle/ mit target: auto, stable, oder rollout

Für allgemeines Channel-Routing und Gerätepriorität siehe Kanäle. Für die Notfallwiederherstellung von Bundles außerhalb eines Progressive Rollouts siehe Rollback eines live update.