"firebase-tools": "4.1.1"
OS X und Bitbucket Pipelines CI
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
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:
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
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 😏
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?