Bereitstellungen
Ein Deployment ist ein Build-und-Release eines Service. Services laufen als Kubernetes-Pods. Ein erfolgreicher Build belegt für sich allein nicht, dass die Anwendung gestartet ist oder Anfragen verarbeiten kann.
Wie ein Bereitstellen erfolgt
Ein Deployment wird ausgelöst durch:
- Ein
git pushauf den verfolgten Branch (bei Services mitgithub-Quelle). lizard redeploy— Neuaufbau vom neuesten Commit (git) oder letzten Upload mit den aktuellen Variablen.lizard up— lädt das aktuelle Verzeichnis hoch und deployt es.- Ein
service set, das ein buildrelevantes Feld ändert.
lizard redeploy --service api # rebuild + redeploy from current source
lizard up # upload cwd and deployAblauf
- Build — die Plattform führt Ihren Build aus (siehe Build-Pipeline).
- Vor dem Bereitstellen: Wenn sowohl
preDeployCommandals auchstartCommandgesetzt sind, führt der Containersh -c "<pre> && exec <start>"aus. Der Pre-Deploy-Befehl läuft beim Start jedes Containers (jedes Replikat, jeder Neustart). Machen Sie ihn daher so, dass er sich gefahrlos mehrfach und gleichzeitig ausführen lässt. OhnestartCommandwird er übersprungen. - Start — Lizard startet den neuen Pod neben dem alten. Bei Workers und bei Services mit angehängtem Volume wird zuerst der alte Pod gestoppt; sie laufen daher bei jedem Deploy und Neustart kurz nicht.
- Health-Checks — eine TCP-Probe prüft alle 2 Sekunden den Port der App, und Traffic wird erst auf einen bereiten Pod umgeschaltet. Lizard wartet darauf etwa 30 Sekunden; ist der neue Pod bis dahin nicht bereit, wird das Deployment als fehlgeschlagen markiert. Workers überspringen die Probe.
- Prüfen — prüfen Sie den Release-Status und rufen Sie die Anwendungs-URL auf. Die Erreichbarkeit des Ports ist kein vollständiger Health-Checks der Anwendung.
Streaming-Ausgabe
Wenn Sie ein nicht-detachtes lizard up (oder redeploy) ausführen, werden Build-Logs live gestreamt. Mit lizard up --json erhalten Sie ein JSON-Ereignis pro Zeile:
{ "event": "log", "line": "..." }
{ "event": "deployed", "status": "...", "url": "https://..." }Das letzte Ereignis ist deployed, failed oder deploying. lizard redeploy --json gibt keine Log-Zeilen aus: Es liefert sofort ein Objekt (status: "deploying") oder mit --wait am Ende ein Objekt mit ok und dem endgültigen status. Verwenden Sie --detach, um das Bereitstellen zu starten und sofort zurückzukehren, ohne Streaming.
Verlauf prüfen
lizard events # deploy history + per-replica status
lizard events --limit 25 # show more
lizard ps # current services, status, and URLsIm Dashboard listet der Tab Übersicht jedes Service seine Deploys auf. Öffnen Sie einen, um Status, Quelle, Build-Logs und Neustarts zu sehen.
Neustarts vs. Redeploys
| Befehl | Was es tut |
|---|---|
lizard restart --service <svc> | Neustart des aktuellen Builds — kein Neuaufbau |
lizard redeploy --service <svc> | Neuer Build vom neuesten Commit/Upload, dann Release |
Siehe lizard restart und lizard redeploy. Verwenden Sie restart, um Replikate neu zu starten (z. B. um ein Runtime-Secret zu übernehmen, das nicht per Hot-Reload geladen wurde); verwenden Sie redeploy, wenn Sie einen neuen Build benötigen.
Wiederherstellung nach einem Absturz
Prüfen Sie die Logs des letzten Absturzes oder Neustarts:
lizard logs --restart latest # log tail around the latest restart
lizard logs --restart <id> # a specific restart
lizard events # see replica statusKonfigurationsänderungen (kein Neuaufbau)
Die meisten Änderungen an Umgebungsvariablen und Secrets werden ohne Neuaufbau übernommen: Lizard aktualisiert die Konfiguration des Service und startet ihn neu, was einige Sekunden dauert. Build-Zeit-Werte (VITE_*, NEXT_PUBLIC_*) und Änderungen an Build-Feldern erzwingen bei einem laufenden Service jedoch einen Neuaufbau. Siehe die Tabelle der Rebuild-Auslöser und Build-Zeit-Variablen.
Fehlgeschlagene Releases und Wiederherstellung
Ein fehlgeschlagener Build und ein fehlgeschlagener Start der Anwendung sind unterschiedliche Fälle. Ein fehlgeschlagener Build ändert nichts: Die laufende Version bleibt in Betrieb. Wird ein neuer Pod nie bereit, liefert ein HTTP-Service weiterhin seine vorherige Version aus, und der neue Pod erhält keinen Traffic. Workers und Services mit angehängtem Volume stoppen den alten Pod, bevor der neue startet; ein Release, das nie bereit wird, legt sie daher still. Prüfen Sie den aktiven Service, die Build-Logs und die Runtime-Logs. lizard redeploy baut die ausgewählte Quelle erneut; es ist kein Befehl zum Wiederherstellen eines vorherigen Builds. Setzen Sie bei Bedarf den Quell-Commit zurück, deployen Sie ihn und prüfen Sie das Ergebnis. Siehe bekannte Probleme.
Aktualisiert