Firebase-tools: La suppression en mode non interactif n'est pas possible

Créé le 17 août 2018  ·  18Commentaires  ·  Source: firebase/firebase-tools

Informations sur les versions

"firebase-tools": "4.1.1"

Informations sur la plate-forme

OS X et Bitbucket Pipelines CI

Étapes à reproduire

Dans les pipelines Bitbucket CI, en utilisant le mode non interactif avec des variables d'environnement
firebase use myproject
firebase deploy avec 5 fonctions dans index.js

_Dans un PR ultérieur_
firebase deploy avec seulement 4 fonctions dans index.js

Comportement prévisible

  1. Le déploiement complet de firebase supprime la fonction "5th" qui n'est plus dans le dernier index.js
  2. Aucune étape manuelle/commande CLI n'est requise (comme dans les versions précédentes des outils Firebase)

Comportement réel

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

Commentaire le plus utile

Bien sûr : nous refactorisons constamment d'anciennes fonctions et les remplaçons souvent (en échangeant https onRequest contre onCall par exemple). Il nous est plus facile de supprimer l'ancienne fonction et d'en ajouter une nouvelle. Parfois, nous n'utilisons tout simplement plus la fonction et voulons qu'elle disparaisse.
Nous ne supprimerions pas une fonction chaque semaine, mais maintenant qu'il n'est plus possible de le faire via CI, cela signifie que nous devons ajouter une étape manuelle en revue pour supprimer manuellement avant la fusion et le déploiement automatique. Cela signifie également qu'au moins deux développeurs ont besoin d'un accès en écriture à nos fonctions de production, ce dont nous essayons de nous éloigner pour plus de tranquillité d'esprit.
Si nous avions quelque chose comme firebase deploy --allow-deletes et que nous maintenions un bon processus de révision, toute notre équipe de développement peut librement créer/mettre à jour/supprimer n'importe quoi sans attendre que j'ouvre la CLI de production sur mon ordinateur portable pendant que je travaille sur quelque chose autre.

Je peux comprendre pourquoi la valeur par défaut serait de ne pas supprimer, mais nous sommes surpris que ce ne soit pas possible/bloqué en mode non interactif, en supposant que la plupart des gens dans ce mode examinent attentivement avant de déployer comme nous le faisons ?

Tous les 18 commentaires

Bonjour, il s'agit d'un comportement intentionnel, car nous avons reçu de nombreux commentaires selon lesquels les utilisateurs n'aimaient pas la façon dont la CLI supprimait automatiquement leurs fonctions. Nous avons donc maintenant besoin de la confirmation de l'utilisateur pour les suppressions, ce qui ne peut pas être fait en mode non interactif.

C'est pourquoi la version était une version majeure, pour indiquer un changement de comportement de rupture.

@laurenzlong un indicateur pourrait-il être ajouté pour autoriser les suppressions en mode non interactif ? Supprimer des fonctions à la main dans CLI pour nous est beaucoup moins sûr et moins pratique qu'une bonne politique de révision/fusion + déploiements CI

Pourriez-vous développer un peu plus votre raisonnement? Supprimez-vous souvent des fonctions pendant CI ?

Bien sûr : nous refactorisons constamment d'anciennes fonctions et les remplaçons souvent (en échangeant https onRequest contre onCall par exemple). Il nous est plus facile de supprimer l'ancienne fonction et d'en ajouter une nouvelle. Parfois, nous n'utilisons tout simplement plus la fonction et voulons qu'elle disparaisse.
Nous ne supprimerions pas une fonction chaque semaine, mais maintenant qu'il n'est plus possible de le faire via CI, cela signifie que nous devons ajouter une étape manuelle en revue pour supprimer manuellement avant la fusion et le déploiement automatique. Cela signifie également qu'au moins deux développeurs ont besoin d'un accès en écriture à nos fonctions de production, ce dont nous essayons de nous éloigner pour plus de tranquillité d'esprit.
Si nous avions quelque chose comme firebase deploy --allow-deletes et que nous maintenions un bon processus de révision, toute notre équipe de développement peut librement créer/mettre à jour/supprimer n'importe quoi sans attendre que j'ouvre la CLI de production sur mon ordinateur portable pendant que je travaille sur quelque chose autre.

Je peux comprendre pourquoi la valeur par défaut serait de ne pas supprimer, mais nous sommes surpris que ce ne soit pas possible/bloqué en mode non interactif, en supposant que la plupart des gens dans ce mode examinent attentivement avant de déployer comme nous le faisons ?

Merci pour le retour Alan, je vais ouvrir la discussion en interne à ce sujet.

Merci Laurent 🙌

Nous avons exactement le même problème. Cela aiderait aussi beaucoup. Nous avons dû abandonner nos déploiements automatisés à l'aide de Google Cloud Builder à cause de la mise à jour.

Je ne sais pas si quelqu'un l'a déjà suggéré.
La plupart des utilisateurs semblent préférer un indicateur où les fonctions non présentes seront supprimées.

Ce n'est pas toujours l'option que tout le monde veut avoir.
Par exemple, nous aimerions avoir un indicateur, qui nous permet d'ignorer simplement ces fonctions.
Ainsi, les fonctions ne seront pas mises à jour ou supprimées.

Par exemple, si quelqu'un a créé une nouvelle fonction dans une branche de fonctionnalité et l'a déployée en utilisant firebase deploy --only functions:functionName à des fins de test.
Cela n'affectera aucune autre fonction dans l'utilisation de la production.

Et puis quelqu'un essaie de déployer une nouvelle version, alors notre pipeline CI démarre et appelle la commande
firebase deploy --ignore-missing-functions , le déploiement mettrait à jour toutes les fonctions présentes, créerait des fonctions manquantes, mais ne mettrait pas à jour ou supprimerait la fonction functionName .

Je vois l'avantage d'un drapeau pour récupérer l'ancien comportement, donc les deux comportements seraient formidables à mon avis.
Supprimez les fonctions manquantes ou ignorez-les simplement.

Pareil ici. Étant donné que nous avons beaucoup de déclencheurs et que nous devons souvent déplacer la base de données utilisateur du projet de production au projet de développement à des fins d'enquête et de dépannage, nous avons besoin d'un moyen de désactiver tous les déclencheurs lors de l'importation json.
Et le seul moyen de désactiver les déclencheurs que nous avons proposés est de supprimer toutes les fonctions du projet de développement avant l'importation - commentez littéralement tous les index.js, déployez-les sur dev, puis importez le json, puis rétablissez toutes les fonctions pour une enquête plus approfondie sur tout problème signalé.

S'il existe un moyen de désactiver les déclencheurs de manière plus conviviale avec la CLI mise à jour, j'apprécierais beaucoup toute contribution sur la manière d'y parvenir. Sinon, la suppression de fonctions de CLI dans un lot est toujours une chose sur laquelle nous comptons.

@laurenzlong est-ce que cela est abordé?

Nous ajouterons bientôt une option pour forcer la suppression des fonctions manquantes.
Nous avons entendu les commentaires, j'espère que cela aide. Le comportement par défaut sera
reste le même.

Le vendredi 12 octobre 2018, à 5 h 06, Solomon Engel < [email protected] a écrit :

@laurenzlong https://github.com/laurenzlong est-ce que cela est en train d'être résolu ?

-
Vous recevez ceci parce que vous êtes abonné à ce fil.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/firebase/firebase-tools/issues/877#issuecomment-429303503 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAAD_npvEeL-UEG_Q5YNtNylQCi_9hKKks5ukIWtgaJpZM4WCBfg
.

@mbleigh Existe-t-il une option pour ne supprimer aucune fonction lorsque firebase deploy ?

Par exemple, si j'ai 2 référentiels distincts avec des fonctions totalement différentes qui se déploient tous dans le même projet Functions.

Donc par exemple :
j'ai des repos

  • "frontend", avec la fonction :

    • languageRedirector

  • "backend", avec :

    • onUserAuthenticated

Maintenant, si j'exécute firebase deploy partir du référentiel "frontend", je veux mettre à jour uniquement languageRedirector
et si j'exécute firebase deploy partir du référentiel "backend", je veux mettre à jour uniquement onUserAuthenticated

Est-ce possible?

@IchordeDionysos ce n'est pas possible, à ma connaissance. Au cours du processus de déploiement, les fonctions sont inspectées pour déterminer ce qui doit être supprimé et ce qui doit être ajouté. S'il en manque un dans le code, la CLI tentera de le supprimer.

Est-ce que vous envisagez ce #999 ? :)
Nous avons vraiment besoin de cette option car notre script CI ne fonctionnera actuellement pas sans cela...

Je viens de mettre une note sur ce PR. Bien que ce soit une bonne idée, il faut un peu plus de processus interne pour ajouter un indicateur comme celui-ci. Je ne m'attendrais pas à ce que quelque chose se passe dans plusieurs jours, mais sachez que c'est sur notre radar.

@IchordeDionysos En attendant, est-il possible pour vous d'utiliser --only functions:[function] sur firebase deploy pour faire fonctionner votre CI ? Vous pouvez trouver plus de détails ici : https://firebase.google.com/docs/cli/#deploy_specific_functions

Pour nous, le problème est résolu. Nous pouvons à nouveau déployer via Google Cloud Builder.

Voici le "hack" que nous utilisons pour uniquement upsert la fonction (pas pour supprimer les autres):

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

J'apprécierais également d'avoir une option explicite telle que --no-delete plutôt que de se fier à la question qui ne change jamais 😏

Cette page vous a été utile?
0 / 5 - 0 notes