Der Preis für das Auslassen von
Die Kosten für das Auslassen von DienstleistungsausführungDie Arbeit verschwindet nicht, sie wird nur aus dem Releasefenster in den Wochenendtag verlegt, wo sie langsamer, riskanter und viel schwieriger zu entwirren ist. Teams, die wiederholbare Pipelines aufbauen, behandeln die Releases nicht mehr als Rituale und beginnen, sie als Infrastruktur zu behandeln.
Der Markt spiegelt diesen Wandel wider. Der Markt für die Dienstleistungsausführung wird von $7,11 Milliarden im Jahr 2025 bis zu $8,29 Milliarden im Jahr 2026und dann bis zu $15,19 Milliarden bis 2030, was darauf hinweist, dass die Automatisierung zur Standard-Release-Infrastruktur wird und nicht mehr ein Nischenerweiterung ist. Gleichzeitig bindet sich die DORA-Style-Delivery-Forschung an die Leistungsfähigkeit von Teams, die mehrere Mal pro Tag deployen können, innerhalb von weniger als einer Stunde wiederherstellen können und ihre Fehler in den niedrigen einstelligen Zehnteln halten können, während Industrie-Statistiken berichten, dass 68% weniger Ausführungsfehler für Organisationen, die DevOps anwenden 60% weniger Fehlfunktionen bei der Bereitstellung für Unternehmen, die Infrastruktur als code nutzen, wie in den Quellen angegeben Automatisierung der Bereitstellung und Leistung der Lieferung.
Inhaltsverzeichnis
- Der Montagmorgen, an dem eine Pipeline hätte retten können
- Was Automatisierung der Bereitstellung bedeutet
- Jeder Pipeline benötigt die Kernkomponenten
- Ein Commit zu einer Produktionspipeline in der Praxis
- Wenn das Zielgerät bereits in den Händen der Benutzer ist
- Wie Live-Update-Plattformen Ihre Pipeline erweitern
- Veröffentlichungen sicher machen mit Beobachtung und Schutzzaunen
- Best Practices und Fallstricke vor Ihrer nächsten Veröffentlichung
Der Montagmorgen, den eine Pipeline hätte retten können
Der Montagmorgen beginnt mit dem bekannten Ritual. Jemand öffnet den Notfallkanal, ein anderer fragt, ob der Hotfix ausgegangen ist, und ein dritter Person überprüft noch, ob die Veröffentlichung in die Staging-Umgebung vor der Produktion gelangt ist. Bis dahin hat der Ausfall bereits das Wochenende gefressen, und das Team muss gleichzeitig an Memory, Timing und Release-Zustand arbeiten.
Das ist, was eine manuelle Bereitstellung in der Praxis aussieht. Jeder Schritt hängt von der Erinnerung einer Person an die richtige Reihenfolge, den richtigen Server und die richtige Kopie des Artefakts ab. Wenn die Veröffentlichung fehlschlägt, gibt es keine zuverlässige Aufzeichnung dessen, was geändert wurde, was bedeutet, dass der Rollback ein Wagnis ist und nicht ein Verfahren.
Eine Pipeline ändert die Arbeit vollständig. Der Commit löst die Validierung aus, der Build produziert ein bekanntes Artefakt, der Bereitstellungsengine fördert dieses Artefakt durch kontrollierte Stufen und die Veröffentlichung passiert entweder die Gesundheitskontrollen oder hält vorher inne, bevor sie größere Schäden verursacht. Der wichtige Schub ist nicht nur Geschwindigkeit, sondern Wiederholbarkeit, weil Wiederholbarkeit das ist, was Veröffentlichungen von einem spätnächtlichen Wagnis in ein normales operatives Aufgabenfeld verwandelt.
Praktische Regel: Wenn eine Veröffentlichung jemanden dazu bringt, den Zustand aus dem Gedächtnis zu erinnern, ist der Prozess noch nicht automatisiert.
Die besten Teams feiern nicht die Abwesenheit von Vorfällen, sie planen sie. Sie wollen die genaue Version, die genauen Überprüfungen und den genauen Rollbackpfad jeder Veröffentlichung befestigt, damit der Montagsgespräch über Produktänderungen und nicht über Forensik geht. Deshalb Die Bereitstellung automatisieren macht mehr als nur Komfort. Sie schützt die Ingenieurszeit, aber sie schützt auch das Veröffentlichungskalender von einem Kalender von Unterbrechungen.
Was bedeutet Deployment Automation?
Ein Release-Pipeline ist kein Skript zum Kopieren von Dateien. Die Bereitstellung automatisieren bewegt code durch definierte Überprüfungen, Verpackung, Promotion und Release-Gates, so dass die Handover kontrolliert und wiederholbar sind. Menschen setzen die Politik noch immer, aber sie müssen sich nicht in jedem Schritt aufhalten.

Das ist ein wichtiger Unterschied in der Produktion. Ein systematischer Überblick über Automatisierungstechnologien der Bereitstellung zeigt sechs Fähigkeiten, die eine echte Plattform von einer einfachen Skript-Plattform unterscheiden: Unterstützung für mehrere Cloud-Anbieter oder Plattformen, Zielsetzung für verschiedene XaaS-Angebote, Strukturierung der Bereitstellungen in logische Teile, Erstellung von wiederverwendbaren Entitäten, Spezifizierung des gewünschten Anwendungsstatus und Beeinflussung des Lebenszyklus der Bereitstellung. Deklarative Systeme handhaben den Drift besser, weil der Motor den Zustand wiederherstellt und nicht die Operatoren auffordert, Befehle manuell wiederholen zu müssen.
Die sechs Eigenschaften, die zählen
Eine reife Plattform deckt diese Verhaltensweisen in irgendeiner Form ab:
- Zielt auf mehr als einen Umgebungs-Typ ab. Ein echter Pipeline kann sich durch Dev, Staging und Produktion bewegen, ohne die Release-Logik jedes Mal neu zu schreiben.
- Unterteilt Releases in logische Teile. Das lässt Teams ein einzelnes Komponente oder Service vorantreiben, ohne alles auf einmal zu pushen.
- Verwendet wiederverwendbare Bereitstellungs-Primitive. Vorlagen, Pakete oder Releasedefinitionen reduzieren die Wahrscheinlichkeit, dass jede Mannschaft ihr eigenes Verfahren entwickelt.
- Definiert den gewünschten Zustand. Das System weiß, was laufen sollte, nicht nur, was das letzte Kommando war.
- Einbinden in das Bereitstellungslebenzyklus. Überprüfungen, Schranken und Callbacks finden an bekannten Punkten statt.
- Überwacht die Umgebungen. Der gleiche Releasepfad sollte konsistent von Test bis Produktionsumgebung verhalten.
Der praktische Test ist einfach. Wenn Ihr Team noch in Maschinen einloggt, Kopien von Artefakten erstellt und die gleichen Befehle in drei Umgebungen ausführt, handelt es sich um Release-Handling, nicht um Automatisierung. Ein wahrer Pipeline kann validieren, schützen und anpassen, da die Steuerpunkte bereits eingebaut sind.
Für eine genauere Vergleichbarkeit zwischen kontinuierlicher Bereitstellung und breiterer Release-Automatisierung dieser Erklärung von kontinuierlicher Bereitstellung trennt die automatisierte Promotion von der vollständig unangeleiteten Lieferung.
Die Kernkomponenten, die jede Pipeline benötigt
Auslieferungssysteme sind nur so stark wie ihre schwächsten Schnittstellen. Wenn eine Schicht manuell ist, biegt sich der Releasepfad darum und das ist, wo Drift, Inkonsistenz und Schuldspiele auftauchen. Das Ziel ist nicht, Werkzeuge zu stapeln, sondern die richtigen Steuerungspunkte zu verbinden, damit jeder Release einen Pfad und eine Quelle der Wahrheit hat.

Build und Release benötigen separate Jobs
Die kontinuierliche Integration und Lieferung handeln die erste Hälfte der Geschichte ab, indem sie kompilieren, testen und vorbereiten, code so, dass es sicher ist, voranzukommen. Buildpipelines erstellen eine reproduzierbare Ausgabe, während die Artefaktverwaltung diese Ausgabe unveränderlich und nachvollziehbar hält. Wenn Teams diese Jobs vermischen, beginnen sie, aus der Quelle in jedem Umfeld neu aufzubauen, was es schwieriger macht, einen 'erfolgreichen' Deploy später nachzuvollziehen.
Die Rolloutstrategie entscheidet, wie viel Risiko man auf einmal eingeht
Ein Release-Plan ist keine Dekoration. Es ist der Unterschied zwischen allen Benutzern ein schlechtes Build auszusetzen und einer kleinen Gruppe den Blastradius zuerst zuzuführen. Die Canary-, Blue/Green- und Phased-Rollout-Muster geben dir jeweils eine Möglichkeit, den Auswirkungen eines unerwarteten Defekts zu reduzieren, während eine stumpfe alle-zu-einmal-Auslieferung jeden Fehler in einen vollständigen Ausfall verwandelt.
Die Beobachtbarkeit und die Wächter halten den Release ehrlich
Ausfallsicherheit ohne Beobachtung sagt dir nur, dass Bytes verschoben wurden, nicht, dass die Benutzer gesund geblieben sind. Die Wartung sollte an das Release selbst angebracht werden, nicht nachträglich hinzugefügt. Dazu gehören die Bereitstellungsmetadaten, die Gesundheitsprüfungen und die Fehlerschwelle, die an die tatsächlich laufende Version geknüpft ist.
Sicherheit sollte innerhalb des Pfads liegen, nicht neben ihm
Sicherheitsgitter können nicht als letzte manuelle Überprüfung sein, die jeder unter Druck umgeht. Sie müssen im Release-Pfad sitzen, damit gefährdete Artefakte, falsch konfigurierte Geheimnisse und ungesicherte Berechtigungsänderungen vor der Produktion gestoppt werden. Sobald Sicherheit ein separates Kontrollkästchen wird, behandeln die Teams es wie Papierkram anstatt als Kontrolle.
Praktische Regel: Wenn du nicht wissen kannst, welches Artefakt läuft, woher es kommt und welche Prüfungen es bestanden hat, ist der Pipeline zu locker.
Für Teams, die GitHub als Hauptentwicklungsoberfläche verwenden, dieser CI-Einrichtungshandbuch Ein Commit-to-Production-Pipeline in der Praxis
Ein guter Pipeline fühlt sich langweilig an, weil jede Übergabe explizit ist. Ein Entwickler pusht einen Commit, die Pipeline läuft die Tests aus, der Build erstellt ein signiertes Artefakt und die Release-Metadaten reisen mit diesem Artefakt bis in die Produktion. Der Punkt ist nicht, die Urteilsfähigkeit zu entfernen, sondern die Ambiguität.
Ein funktionierender End-to-End-Flow
Ein Commit landet im Versionskontrolle-System.
- Ein Commit landet im Versionskontrolle-System. Die Pipeline startet von einem bekannten Revision, nicht von einem unverfolgten Zip-Datei.
- CI führt die Überprüfungen durch. Einheitstests und Integrationstests blockieren die Veröffentlichung, bevor etwas verpackt wird.
- Die Veröffentlichung erstellt ein Artefakt. Das Artefakt ist das Ding, das Sie fördern, nicht ein frischer Neubau in jedem Umfeld.
- Artefakt-Metadaten werden mit der Veröffentlichung gespeichert. Versionstags, Build-IDs und Nachverfolgbarkeit bleiben angehängt.
- Staging wird automatisch gefördert. Das gleiche Paket wird weitergeleitet, also bedeutet Staging etwas Reales.
- Die Produktion deployt hinter einem kontrollierten Rollout. Gesundheitsgatter entscheiden, ob der Traffic weitergeht oder anhält.
Dieser Fluss funktioniert, weil jeder Checkpoint eine einzelne Aufgabe hat. Tests sagen Ihnen, ob der Änderung sicher genug ist, um zu verpacken, das Paket sagt Ihnen, was versendet wurde, und die Veröffentlichungsstufe sagt Ihnen, ob die Benutzer es noch sehen sollten. Das gefährliche Muster ist, die Aufgaben zu mischen, weil dann ein Buildproblem wie ein Laufzeitproblem aussieht und ein Laufzeitproblem wie ein Konfigurationsproblem.
| Pipeline-Phase | Überprüfungsstelle | Artikel | Rückgängigmachungsanstoß |
|---|---|---|---|
| Commit | Versionkontrollenänderung aufgezeichnet | Quellerevision | Schlechte Mergen oder fehlgeschlagener Vorkommit-Prüfungsrichtlinie |
| CI | Einheitstests und Integrationsprüfungen erfolgreich | Getestetes Ausgabedatum | Testfehler oder fluktuierende Testgrenze |
| Paket | Signiertes Artefakt erstellt | Unveränderliches Releasepaket | Fehlende Übereinstimmung bei der Build oder Fehlschlag der Signaturvalidierung |
| Staging | Akzeptierte Promotion | Staging-fertiges Release | Rauchtestfehler oder Konfigurationsverschiebung |
| Produktion | Gesundheitswächter klärt die Rollout | Lebendige Releaseversion | Fehlerspitze, gescheiterte Gesundheitsprüfung oder Benutzerbeeinträchtigung |
Diese Struktur ist auch der Ort, an dem die Veröffentlichungsdisziplin auftritt. Wenn Sie ein Workflow wie der in automatische Build- und Veröffentlichung mit GitHub Actionsverwenden, ist das Geheimnis nicht der Runner selbst, sondern dass der Pipeline eine überprüfte Artefakt durch bekannte Checkpoints fördert, anstatt an jedem Haltepunkt neu zu bauen.
Wenn der Zielort bereits in den Händen der Benutzer ist
Serverseitige Veröffentlichungen haben noch immer eine klare Grenze. Wenn die neue Version sich verhält, können Sie oft den Traffic umleiten, einen Container zurücksetzen oder einen Lastenausgleich wieder auf die letzte bekannte gute Veröffentlichung richten. Sobald die App auf einem Telefon oder Laptop installiert ist, wird die Kontrolle schwächer. Das Gerät entscheidet, wann es die nächste Version abrufen soll, und die Store-Überprüfungsmauer kann jede Korrektur verzögern, die nicht bereits im App-Binary enthalten ist.

Die meisten Automatisierungsleitfäden für die Veröffentlichung stoppen an dieser Grenze. Sie erklären CI/CD, und behandeln die Veröffentlichung als abgeschlossen, wenn der Server neue code akzeptiert. Mobile und Desktop-Teams wissen besser. Ein Fehler in einem JavaScript-Bundle, einer Konfigurationsdatei oder einem Asset-Paket kann immer noch zu einem Produktionsincident führen, selbst wenn die App-Store-Binary nie geändert wird.
Lebendige Aktualisierungssteuerung füllt den Lücke
A lebendige Aktualisierungsplattform erweitert den Pipeline über die Warteschleife der App-Store-Bewertung hinaus, indem sie signierte Web-Bundles direkt an die Geräte der Benutzer schickt. Das ermöglicht es, JavaScript-, CSS-, Kopien-, Konfigurations- und Asset-Fixes ohne Wartezeit auf eine vollständige Binärveröffentlichung auszuführen. Der operative Vorteil ist die Geschwindigkeit und der Kontrolle nach der Bereitstellung. Sie können Kanäle ansteuern, die Adoption beobachten und schnell zurückkehren, wenn ein Feldproblem auftritt.
Capgo ist eine Option in dieser Kategorie und passt sich Teams an, die CapacitorJS oder Electron verwenden und eine signierte Web-Bundle-Lieferung, kanalbasierte Zielsetzung und automatische Rollover für die Veröffentlichungssteuerung nach der Installation benötigen. Weitere Details sind im Produktvergleich unter "Die besten lebendigen Aktualisierungstools für Capgo-Anwendungen" verfügbar. best live update tools for Capacitor apps.
Einbezogene Demo der Veröffentlichungsablauf:
Wie lebendige Aktualisierungsplattformen Ihren Pipeline erweitern
Eine Veröffentlichung kann in CI als “fertig” markiert sein und immer noch nur halbwegs aus der Tür hinaus sein. Das Build-Artikel wird zu einem signierten Web-Bundle, das Bundle wird an einen Kanal veröffentlicht und der Kanal entscheidet, welche Geräte es zuerst erhalten. Das ist die Veröffentlichungssteuerung, nur mit dem letzten Meilenstein, der durch die App und nicht durch den Server läuft.
Kanäle wandeln eine Veröffentlichung in mehrere kontrollierte Wege um
A release can be “done” in CI and still be only halfway out the door. The build artifact becomes a signed web bundle, the bundle is published to a channel, and the channel decides which devices receive it first. That is release orchestration, just with the last mile moving through the app instead of the server.
Aus einer einzelnen Pipeline kann das gleiche Bundle an die Staging-, Produktions-, Beta- oder Kundenanpassungsströme gesendet werden, ohne dass sich der Aufbau ändert. Das ist wichtig, weil das genaue Artefakt von einer kleinen Zielgruppe getestet werden kann, bevor es allen anderen erreicht, was Überraschungen bei der Verbreitung vermeidet. Die Release-Logik bleibt gleich, nur die Zielgruppe ändert sich.
Differential-Delivery reduziert Abfälle im Feld
Wenn nur die geänderten Dateien aktualisiert werden, wird der Transfer viel leichter. Das hilft mobilen Benutzern mit schwachen Verbindungen und Teams, die einen kleineren Lieferumfang wollen. Es macht auch häufige Reparaturen praktischer, weil Geräte nicht wieder das gesamte Paket herunterladen müssen, um eine kleine Änderung durchzuführen.
Die Rückkehr muss automatisch und nicht nur aspirativ sein
Wenn das neue Bundle seine Gesundheitsprüfungen nicht besteht, sollte die Plattform die weitere Verbreitung einstellen und auf das letzte bekannte gute Release zurückfallen. Das ist am wichtigsten, wenn das Problem im Update-Schicht selbst liegt, weil das Warten auf eine manuelle Antwort mehr Benutzern Zeit gibt, die schlechte Version herunterzuladen. Eine gute Rollout-Tooling-Software geht davon aus, dass Fehler passieren werden, und bietet einen sauberen Ausstieg.
Für Teams, die sich in diesem Raum vergleichen Capgo’s Live-Update-Tooling-Übersicht zeigt, wie die Bundle-Delivery, die Kanäle und die Rückkehr zusammenarbeiten, um ein Release-Kontrollsystem, nicht drei getrennte Funktionen, zu bilden.
Das praktische Modell ist einfach. CI produziert das Paket, die lebendige Aktualisierungsplattform verteilt es und die Veröffentlichungspolitik entscheidet, wie viel der Benutzerbasis es gleichzeitig sieht. Diese Brücke ist wichtig, weil die Bewertung im App-Store nur eine Grenze ist. Die Produktion muss weiterlaufen, nachdem das Binärdatei bereits in den Händen der Benutzer ist.
Mit Beobachtbarkeit und Wächtern sicher durch die Veröffentlichung
Ein Diagramm, das vier Schlüsselstrategien für sichere Softwareveröffentlichungen mit Beobachtbarkeit und automatischer Überwachung von Wächtern zeigt.

Deployment-IDs Versionstags, , und die genaue Artefakt, das live ist, dann verbinden Sie das Metadaten mit Gesundheitsprüfungen und Rollover-Trigger. Die DevOps-Richtlinien von deployment-Automatisierungspraktiken empfehlen die Zentralisierung von Protokollen, Deploy-Ereignissen, Artefakt-Metadaten und -Dauer- oder -Erfolgssatz-Metriken, dann die Verbindung von Warnungen an SLOs und post-deploy-Regressionen. Der Punkt ist die kausale Klarheit, weil wenn die Warnung gegen eine bestimmte Version abgeht, kann die Mannschaft aufhören zu raten. Die vier Prüfungen, die später Zeit sparen
Deployment-IDs und Versionstags
- Die vier Prüfungen, die später Zeit sparen, sind Deployment-IDs und Versionstags, die genauen Artefakte, die live sind, und die Gesundheitsprüfungen und Rollover-Trigger, die mit diesen Metadaten verbunden sind. erzählen Sie Ihnen, was geändert wurde.
- Gesundheitschecks, die mit der Veröffentlichung verbunden sind erzählen Sie Ihnen, ob die App noch sicher weitergegeben wird.
- Synthetische Tests für kritische Routen fängen Sie offensichtliche Fehler vorher, bevor die Benutzer das tun.
- Progressive Rollout-Muster wie Kanarienvögel oder Blau/Grün begrenzen Sie die Auswirkungen, bis die Zuversicht steigt.
Ein Release-Pipeline sollte auch die Reife von der Lebendigkeit unterscheiden. Die Reife sagt Ihnen, ob der Dienst Verkehr erhalten sollte, während die Lebendigkeit Ihnen sagt, ob er noch genug lebt, um aufrechtzuerhalten. Wenn Sie diese Trennung ignorieren, können Sie Benutzer zu einem Dienst schicken, der technisch gestartet ist, aber noch keine nützlichen Arbeit leisten kann.
Für die Beobachtbarkeit auf mobilen und client-seitigen Bundeln Richtlinien zur Anwendungsbeobachtbarkeit sind besonders relevant, weil die Release-Telemetrie dem Bundle folgen muss, nachdem es den Server verlassen hat. Sobald die Aktualisierung auf einem Gerät ist, ist die einzige nützliche Frage, ob das Gerät sie angenommen und gesund geblieben ist.
Eine Release-Sperre sollte zwei Fragen beantworten, hat sich die Version geändert und ist die Benutzerwirkung nach dem Wechsel schlechter geworden?
Best Practices und Fallstricke vor Ihrer nächsten Veröffentlichung
Die einfachste Möglichkeit, die Automatisierung der Bereitstellung zu verbessern, besteht darin, auf die Abhängigkeit von der Erinnerung zu verzichten. Bevor die nächste Veröffentlichung erfolgt, stellen Sie sicher, dass der Pipeline eine Versionsnummer aufzeichnet, das Artefakt unveränderlich speichert und einen klaren Rückkehrpfad offenlegt. Wenn eine Person nachträglich rekonstruieren muss, was nach der Veröffentlichung verschickt wurde, ist die Automatisierung zu dünn.
Beginnen Sie mit den Kontrollen, die das größte Risiko reduzieren. Setzen Sie Vorkontrollen vor der Produktion, verbinden Sie Gesundheitswachen mit der genauen Bereitstellungsversion und stellen Sie sicher, dass die Staging-Umgebung das gleiche Artefakt verwendet, das die Produktion erhalten wird. Dann entfernen Sie die manuellen Schritte, die ohne Beurteilung Verzögerungen hinzufügen, insbesondere SSH-Kopieren, ad-hoc-Konfigurationsanpassungen und letzte-Minuten-Datei-Ersatz auf einem laufenden System.
Gemeinsame Fehler zeigen sich immer wieder aufgrund desselben Grundes, sie verstecken sich in den Lücken zwischen den Werkzeugen.
- Keine Versionsnummern: Wenn Sie die Veröffentlichung nicht benennen können, können Sie sie nicht sicher besprechen.
- Kein Rückkehrtrigger: Wenn der Fehler die automatische Weiterleitung nicht stoppt, muss jemand es rechtzeitig bemerken.
- Mischte Artefakte und Konfigurationen: Wenn die Build in jedem Umfeld unterschiedlich ist, verliert die Staging-Umgebung an Bedeutung.
- Übersprungene Vorkontrollen: Wenn Rauchtests nur nach weit verbreiteter Exposition erfolgen, werden die Benutzer zu Ihrem Testensemble.
Die breitere Richtung ist klar. Teams bewegen sich in Richtung von Release-Regeln, die als Policy ausgedrückt werden, nicht als Stammeswissen, und sie verwenden automatisierte Analyse, um zu entscheiden, ob eine Rollout fortgesetzt, angehalten oder rückgängig gemacht werden sollte. Die AI-gestützte Rollout-Analyse hilft einigen Teams dabei, Muster schneller zu erkennen, aber sie wird die Grundlagen nicht ersetzen, Versionskontrolle, Gesundheitswachen und saubere Rollback-Logik tun immer noch die entscheidende Arbeit.
Der nächste Schritt ist einfach. Wählen Sie einen Release-Pfad aus, instrumentieren Sie ihn von Anfang bis Ende und stellen Sie sicher, dass die gleichen Kontrollen für Web, Mobile und Desktop-Bundles funktionieren, wenn Ihre Produkte in allen drei Bereichen geliefert werden. Wenn dieser Pfad unter Druck langweilig ist, haben Sie etwas Wertvolles gebaut.
Wenn Sie versuchen, die Release-Automatisierung über die Servergrenze hinaus zu erweitern, bietet Capgo den Capacitor- und Electron-Teams eine Möglichkeit, signierte Web-Bundle-Updates zu liefern, Zielkanäle anzusteuern, die Adoption zu beobachten und schnell zurückzukehren, wenn eine Release falsch verhält. Besuchen Sie Capgo __CAPGO_KEEP_0__