Firebase-tools: Löschen im nicht interaktiven Modus ist nicht möglich

Erstellt am 17. Aug. 2018  ·  18Kommentare  ·  Quelle: firebase/firebase-tools

Versions Information

"firebase-tools": "4.1.1"

Plattforminformationen

OS X und Bitbucket Pipelines CI

Schritte zum Reproduzieren

In Bitbucket-Pipelines CI im nicht interaktiven Modus mit env-Variablen
firebase use myproject
firebase deploy mit 5 Funktionen in index.js

_In einer späteren PR_
firebase deploy mit nur 4 Funktionen in index.js

Erwartetes Verhalten

  1. Die vollständige Firebase-Bereitstellung entfernt die "5." Funktion, die nicht mehr in der neuesten index.js enthalten ist
  2. Es sind keine manuellen Schritte/CLI-Befehle erforderlich (wie in früheren Versionen der Firebase-Tools)

Tatsächliches Verhalten

Error: The following functions are found in your project but do not exist in your local source code:
... Liste der Funktionen ...
Aborting because deletion cannot proceed in non-interactive mode. To fix, manually delete the functions by running:

Hilfreichster Kommentar

Klar: Wir überarbeiten ständig alte Funktionen und ersetzen sie oft (zB https onRequest gegen onCall tauschen). Es ist einfacher für uns, die alte Funktion zu löschen und eine neue hinzuzufügen. Manchmal verwenden wir die Funktion einfach nicht mehr und möchten, dass sie weg ist.
Wir würden nicht jede Woche eine Funktion löschen, aber jetzt, da dies nicht über CI möglich ist, bedeutet dies, dass wir einen manuellen Überprüfungsschritt hinzufügen müssen, um vor dem Zusammenführen und automatischen Bereitstellen manuell zu löschen. Es bedeutet auch, dass mindestens zwei Entwickler Schreibzugriff auf unsere Produktionsfunktionen benötigen, von denen wir aus Sicherheitsgründen versuchen, wegzukommen.
Wenn wir so etwas wie firebase deploy --allow-deletes und wir einen guten Überprüfungsprozess beibehalten, kann unser gesamtes Entwicklerteam alles frei erstellen/aktualisieren/löschen, ohne darauf zu warten, dass ich die Produktions-CLI auf meinem Laptop öffne, während ich an etwas arbeite anders.

Ich kann verstehen, warum die Standardeinstellung nicht das Löschen wäre, aber wir sind überrascht, dass dies im nicht interaktiven Modus nicht möglich / blockiert ist, vorausgesetzt, die meisten Leute in diesem Modus überprüfen sie gründlich, bevor sie sie bereitstellen, wie wir es tun?

Alle 18 Kommentare

Hallo, dies ist beabsichtigt, da wir viele Rückmeldungen erhalten haben, dass Benutzer nicht mochten, wie die CLI ihre Funktionen automatisch löschte. Daher benötigen wir jetzt eine Benutzerbestätigung für Löschungen, die nicht interaktiv durchgeführt werden können.

Aus diesem Grund war die Veröffentlichung ein wichtiger Versionssprung, um auf eine bahnbrechende Verhaltensänderung hinzuweisen.

@laurenzlong könnte ein Flag hinzugefügt werden, um das Löschen im nicht interaktiven Modus zu ermöglichen? Das manuelle Löschen von Funktionen in der CLI ist für uns viel weniger sicher und umständlich als eine gute Überprüfungs-/Zusammenführungsrichtlinie + CI-Bereitstellungen

Könnten Sie Ihre Argumentation noch etwas erweitern? Löschen Sie während der CI häufig Funktionen?

Klar: Wir überarbeiten ständig alte Funktionen und ersetzen sie oft (zB https onRequest gegen onCall tauschen). Es ist einfacher für uns, die alte Funktion zu löschen und eine neue hinzuzufügen. Manchmal verwenden wir die Funktion einfach nicht mehr und möchten, dass sie weg ist.
Wir würden nicht jede Woche eine Funktion löschen, aber jetzt, da dies nicht über CI möglich ist, bedeutet dies, dass wir einen manuellen Überprüfungsschritt hinzufügen müssen, um vor dem Zusammenführen und automatischen Bereitstellen manuell zu löschen. Es bedeutet auch, dass mindestens zwei Entwickler Schreibzugriff auf unsere Produktionsfunktionen benötigen, von denen wir aus Sicherheitsgründen versuchen, wegzukommen.
Wenn wir so etwas wie firebase deploy --allow-deletes und wir einen guten Überprüfungsprozess beibehalten, kann unser gesamtes Entwicklerteam alles frei erstellen/aktualisieren/löschen, ohne darauf zu warten, dass ich die Produktions-CLI auf meinem Laptop öffne, während ich an etwas arbeite anders.

Ich kann verstehen, warum die Standardeinstellung nicht das Löschen wäre, aber wir sind überrascht, dass dies im nicht interaktiven Modus nicht möglich / blockiert ist, vorausgesetzt, die meisten Leute in diesem Modus überprüfen sie gründlich, bevor sie sie bereitstellen, wie wir es tun?

Danke für das Feedback Alan, ich werde die Diskussion dazu intern eröffnen.

Danke Lauren

Wir haben genau das gleiche Problem. Es würde auch sehr helfen. Aufgrund des Updates mussten wir unsere automatisierten Bereitstellungen mit Google Cloud Builder aufgeben.

Ich bin mir nicht sicher, ob es schon jemand vorgeschlagen hat.
Die meisten Benutzer scheinen ein Flag zu bevorzugen, bei dem nicht vorhandene Funktionen gelöscht werden.

Dies ist nicht immer die Option, die jeder haben möchte.
Zum Beispiel hätten wir gerne ein Flag, mit dem wir diese Funktionen einfach ignorieren können.
Die Funktionen werden also nicht aktualisiert oder gelöscht.

Zum Beispiel, wenn jemand eine neue Funktion in einem Feature-Branch erstellt und sie zu Testzwecken mit firebase deploy --only functions:functionName bereitgestellt hat.
Dies hat keine Auswirkungen auf andere Funktionen im Produktionseinsatz.

Und dann versucht jemand, eine neue Version bereitzustellen, dann würde unsere CI-Pipeline starten und den Befehl aufrufen
firebase deploy --ignore-missing-functions , dann würde die Bereitstellung alle vorhandenen Funktionen aktualisieren, fehlende Funktionen erstellen, aber die Funktion functionName nicht aktualisieren oder löschen.

Ich sehe den Vorteil einer Flagge, um das alte Verhalten zurückzubekommen, daher wäre es meiner Meinung nach großartig, beide Verhaltensweisen zu haben.
Löschen Sie fehlende Funktionen oder ignorieren Sie sie einfach.

Hier gilt das gleiche. Da wir viele Trigger haben und wir oft die Benutzerdatenbank zur Untersuchung und Fehlerbehebung vom Prod- in das Dev-Projekt verschieben müssen, brauchen wir eine Möglichkeit, alle Trigger während des Json-Imports zu deaktivieren.
Und die einzige Möglichkeit, Trigger zu deaktivieren, die wir gefunden haben, besteht darin, alle Funktionen im Dev-Projekt vor dem Import zu löschen - buchstäblich alle index.js auskommentieren, in Dev bereitstellen, dann den Json importieren und dann alle Funktionen zurücksetzen für weitere Untersuchung aller gemeldeten Probleme.

Wenn es eine Möglichkeit gibt, Trigger mit der aktualisierten CLI freundlicher zu deaktivieren, würde ich mich über jeden Hinweis freuen, wie dies erreicht werden kann. Ansonsten verlassen wir uns immer noch auf das Entfernen von Funktionen aus der CLI in einem Batch.

@laurenzlong wird das angesprochen?

Wir werden in Kürze eine Option hinzufügen, um das Löschen fehlender Funktionen zu erzwingen.
Wir haben das Feedback gehört, hoffentlich hilft es. Das Standardverhalten wird
gleich bleiben.

Am Fr, 12. Okt 2018, 05:06 schrieb Solomon Engel < [email protected] :

@laurenzlong https://github.com/laurenzlong wird das angesprochen?


Sie erhalten dies, weil Sie diesen Thread abonniert haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/firebase/firebase-tools/issues/877#issuecomment-429303503 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/AAAD_npvEeL-UEG_Q5YNtNylQCi_9hKKks5ukIWtgaJpZM4WCBfg
.

@mbleigh Gibt es eine Option, um keine Funktion zu löschen, wenn ich firebase deploy ausführe?

Zum Beispiel, wenn ich 2 separate Repositorys mit völlig unterschiedlichen Funktionen habe, die alle im selben Functions-Projekt bereitgestellt werden.

Also zB:
ich habe repos

  • "frontend", mit der Funktion:

    • languageRedirector

  • "Backend", mit:

    • onUserAuthenticated

Wenn ich jetzt firebase deploy aus dem "Frontend"-Repo ausführe, möchte ich nur languageRedirector aktualisieren
und wenn ich firebase deploy aus dem "Backend"-Repository ausführe, möchte ich nur onUserAuthenticated aktualisieren

Ist das möglich?

@IchordeDionysos das ist

Ist diese #999 etwas, das Sie in Betracht ziehen? :)
Wir brauchen diese Option wirklich, da unser CI-Skript derzeit ohne diese nicht funktioniert...

Ich habe nur eine Anmerkung zu dieser PR gemacht. Es ist zwar eine gute Idee, aber es muss ein bisschen mehr interner Prozess passieren, um ein Flag wie dieses hinzuzufügen. Ich würde nicht erwarten, dass in ein paar Tagen etwas passiert, aber ich weiß, dass es auf unserem Radar ist.

@IchordeDionysos Ist es in der Zwischenzeit möglich, --only functions:[function] auf firebase deploy zu verwenden, um Ihr CI zum Laufen zu bringen? Weitere Details finden Sie hier: https://firebase.google.com/docs/cli/#deploy_specific_functions

Für uns ist das Problem gelöst. Wir können wieder über Google Cloud Builder bereitstellen.

Hier ist der "Hack", den wir verwenden, um nur die Funktion zu ändern (andere nicht zu löschen):

echo "n\n" | firebase deploy --only functions --interactive --token $FIREBASE_TOKEN

Würde es auch begrüßen, eine explizite Option wie --no-delete anstatt sich darauf zu verlassen, dass sich die Frage nie ändert 😏

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen