"firebase-tools": "4.1.1"
OSXおよびBitbucketパイプラインCI
BitbucketパイプラインCIで、環境変数を使用した非対話型モードを使用firebase use myproject
firebase deploy
、index.jsに5つの関数があります
_後のPRで_
firebase deploy
、index.jsに4つの関数があります
Error: The following functions are found in your project but do not exist in your local source code:
...関数のリスト..。
Aborting because deletion cannot proceed in non-interactive mode. To fix, manually delete the functions by running:
こんにちは、これは意図的な動作です。CLIが機能を自動的に削除する方法をユーザーが気に入らないというフィードバックがたくさん寄せられたためです。 そのため、削除についてユーザーの確認が必要になります。これは、非対話型では実行できません。
これが、動作の重大な変更を示すために、リリースがメジャーバージョンのバンプであった理由です。
@laurenzlongフラグを追加して、非対話モードでの削除を許可できますか? CLIで手動で関数を削除することは、適切なレビュー/マージポリシー+ CI展開と比較して、安全性と不便さがはるかに低くなります。
あなたの論理的根拠をもう少し詳しく説明していただけますか? CI中に関数を頻繁に削除していますか?
確かに:私たちは常に古い関数をリファクタリングし、頻繁に置き換えています(たとえば、httpsonRequestをonCallに交換します)。 古い関数を削除して新しい関数を追加する方が簡単です。 時々、私たちは単に関数をもう使用しておらず、それを使いたくない場合があります。
毎週関数を削除することはありませんが、CI経由で削除することはできなくなったため、マージして自動デプロイする前に手動で削除するには、レビューの手動ステップを追加する必要があります。 また、少なくとも2人の開発者が本番機能への書き込みアクセス権を必要としていることも意味します。これは、安心のために回避しようとしています。
firebase deploy --allow-deletes
ようなものがあり、適切なレビュープロセスを維持している場合、開発チーム全体が、何かに取り組んでいるときにラップトップで本番CLIを開くのを待たずに、自由に何かを作成/更新/削除できます。そうしないと。
デフォルトで削除されない理由は理解できますが、非対話型モードでは、そのモードのほとんどの人が私たちのように展開する前に徹底的に確認していると仮定すると、それが不可能/ブロックされていないことに驚いていますか?
アランからのフィードバックに感謝します。これについて社内で議論を始めます。
ありがとうローレン🙌
まったく同じ問題があります。 それも大いに役立つでしょう。 アップデートのため、Google CloudBuilderを使用した自動デプロイを断念する必要がありました。
誰かがすでにそれを提案したかどうかはわかりません。
ほとんどのユーザーは、存在しない関数が削除されるフラグを好むようです。
これは、誰もが望んでいるオプションであるとは限りません。
たとえば、これらの関数を無視できるフラグが必要です。
そのため、関数は更新されたり削除されたりしません。
たとえば、誰かが機能ブランチで新しい関数を作成し、テスト目的でfirebase deploy --only functions:functionName
を使用してそれをデプロイしたとします。
これは、実稼働で使用される他の機能には影響しません。
そして、誰かが新しいバージョンをデプロイしようとすると、CIパイプラインが開始され、コマンドが呼び出されます
firebase deploy --ignore-missing-functions
場合、デプロイは現在のすべての関数を更新し、欠落している関数を作成しますが、関数functionName
更新または削除しません。
古い振る舞いを取り戻すには旗の利点があると思うので、私の意見では両方の振る舞いがあれば素晴らしいと思います。
欠落している関数を削除するか、単に無視してください。
こっちも一緒。 トリガーがたくさんあり、調査やトラブルシューティングのためにユーザーデータベースをprodからdevプロジェクトに移動する必要があることが多いため、jsonのインポート中にすべてのトリガーを無効にする方法が必要です。
そして、私たちが思いついたトリガーを無効にする唯一の方法は、インポートする前にdevプロジェクトのすべての関数を実際に削除することです-文字通りすべてのindex.jsをコメントアウトし、それをdevにデプロイしてから、jsonをインポートしてから、すべての関数を元に戻します報告された問題のさらなる調査。
更新されたCLIを使用して、より使いやすい方法でトリガーを無効にする方法がある場合は、それを実現する方法についての入力をいただければ幸いです。 それ以外の場合、CLIから関数をバッチで削除することは、依然として私たちが依存していることです。
@laurenzlongこれは対処されていますか?
不足している機能を間もなく強制的に削除するオプションを追加する予定です。
フィードバックを聞いたことがありますが、これがお役に立てば幸いです。 デフォルトの動作は
同じまま。
2018年10月12日金曜日、午前5:06 Solomon Engel < [email protected]は次のように書いています。
@laurenzlong https://github.com/laurenzlongこれは対処されていますか?
—
このスレッドにサブスクライブしているため、これを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/firebase/firebase-tools/issues/877#issuecomment-429303503 、
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AAAD_npvEeL-UEG_Q5YNtNylQCi_9hKKks5ukIWtgaJpZM4WCBfg
。
@mbleigh firebase deploy
を実行したときに関数を削除しないオプションはありますか?
たとえば、まったく異なる関数を持つ2つの別々のリポジトリがあり、それらがすべて同じ関数プロジェクトにデプロイされているとします。
だから例:
私はリポジトリを持っています
ここで、「フロントエンド」リポジトリからfirebase deploy
を実行した場合、 languageRedirector
のみを更新したいと思います。
「バックエンド」リポジトリからfirebase deploy
を実行する場合、 onUserAuthenticated
のみを更新したい
これは可能ですか?
@IchordeDionysosは、私が知る限り、不可能です。 デプロイプロセス中に、関数が検査され、何を削除する必要があり、何を追加する必要があるかがわかります。 コードから「欠落」している場合、CLIはそれを削除しようとします。
これはあなたが検討している#999ですか? :)
CIスクリプトは現在これなしでは機能しないため、このオプションが本当に必要です...
そのPRにメモを書きました。 それは良い考えですが、このようなフラグを追加するために発生しなければならないもう少し内部プロセスがあります。 数日で何かが起こるとは思いませんが、それが私たちのレーダーにあることは知っています。
@IchordeDionysosそれまでの間、CIを機能させるためにfirebase deploy
--only functions:[function]
を使用することは可能ですか? 詳細については、 https :
私たちにとって、問題は解決されました。 Google CloudBuilderを介して再度デプロイできるようになりました。
関数をアップサートするためだけに使用している「ハック」は次のとおりです(他の関数は削除しません)。
echo "n\n" | firebase deploy --only functions --interactive --token $FIREBASE_TOKEN
また、決して変わらない質問に頼るのではなく、 --no-delete
などの明示的なオプションを用意していただければ幸いです😏
最も参考になるコメント
確かに:私たちは常に古い関数をリファクタリングし、頻繁に置き換えています(たとえば、httpsonRequestをonCallに交換します)。 古い関数を削除して新しい関数を追加する方が簡単です。 時々、私たちは単に関数をもう使用しておらず、それを使いたくない場合があります。
毎週関数を削除することはありませんが、CI経由で削除することはできなくなったため、マージして自動デプロイする前に手動で削除するには、レビューの手動ステップを追加する必要があります。 また、少なくとも2人の開発者が本番機能への書き込みアクセス権を必要としていることも意味します。これは、安心のために回避しようとしています。
firebase deploy --allow-deletes
ようなものがあり、適切なレビュープロセスを維持している場合、開発チーム全体が、何かに取り組んでいるときにラップトップで本番CLIを開くのを待たずに、自由に何かを作成/更新/削除できます。そうしないと。デフォルトで削除されない理由は理解できますが、非対話型モードでは、そのモードのほとんどの人が私たちのように展開する前に徹底的に確認していると仮定すると、それが不可能/ブロックされていないことに驚いていますか?