Firebase-tools: Menghapus dalam mode non-interaktif tidak dimungkinkan

Dibuat pada 17 Agu 2018  ·  18Komentar  ·  Sumber: firebase/firebase-tools

Informasi versi

"firebase-tools": "4.1.1"

Informasi Platform

OS X dan Bitbucket Pipelines CI

Langkah-langkah untuk mereproduksi

Di pipa Bitbucket CI, menggunakan mode non-interaktif dengan variabel env
firebase use myproject
firebase deploy dengan 5 fungsi di index.js

_Dalam PR nanti_
firebase deploy hanya dengan 4 fungsi di index.js

Perilaku yang diharapkan

  1. Penerapan firebase penuh menghapus fungsi "5" yang tidak lagi ada di index.js terbaru
  2. Tidak diperlukan langkah manual/perintah CLI (seperti di versi alat firebase sebelumnya)

Perilaku sebenarnya

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

Komentar yang paling membantu

Tentu: Kami terus memfaktorkan ulang fungsi lama dan sering mengganti (misalnya menukar https onRequest dengan onCall). Lebih mudah bagi kita untuk menghapus fungsi lama dan menambahkan yang baru. Terkadang kita tidak lagi menggunakan fungsi tersebut, dan menginginkannya hilang.
Kami tidak akan menghapus fungsi setiap minggu, tetapi sekarang karena tidak mungkin dilakukan melalui CI, itu berarti kami harus menambahkan langkah manual dalam peninjauan untuk menghapus secara manual sebelum menggabungkan dan menerapkan secara otomatis. Ini juga berarti setidaknya dua pengembang memerlukan akses tulis ke fungsi produksi kami, yang kami coba hindari untuk ketenangan pikiran.
Jika kami memiliki sesuatu seperti firebase deploy --allow-deletes dan kami mempertahankan proses peninjauan yang baik, seluruh tim Pengembang kami dapat dengan bebas membuat/memperbarui/menghapus apa pun tanpa menunggu saya membuka CLI produksi di laptop saya saat saya sedang mengerjakan sesuatu lain.

Saya bisa mengerti mengapa defaultnya adalah untuk tidak menghapus, tetapi kami terkejut itu tidak mungkin/diblokir dalam mode non-interaktif, dengan asumsi kebanyakan orang dalam mode itu meninjau secara menyeluruh sebelum menggunakan seperti kami?

Semua 18 komentar

Hai, ini adalah perilaku yang disengaja, karena kami mendapat banyak umpan balik bahwa pengguna tidak menyukai bagaimana CLI secara otomatis menghapus fungsinya. Jadi sekarang kami memerlukan konfirmasi pengguna untuk penghapusan, yang tidak dapat dilakukan di non-interaktif.

Inilah sebabnya mengapa rilis ini merupakan versi utama, untuk menunjukkan perubahan perilaku yang melanggar.

@laurenzlong dapatkah bendera ditambahkan untuk memungkinkan penghapusan dalam mode non-interaktif? Menghapus fungsi secara manual di CLI bagi kami jauh lebih tidak aman dan tidak nyaman dibandingkan dengan kebijakan tinjauan/penggabungan yang baik + penerapan CI

Bisakah Anda memperluas alasan Anda sedikit lebih banyak? Apakah Anda sering menghapus fungsi selama CI?

Tentu: Kami terus memfaktorkan ulang fungsi lama dan sering mengganti (misalnya menukar https onRequest dengan onCall). Lebih mudah bagi kita untuk menghapus fungsi lama dan menambahkan yang baru. Terkadang kita tidak lagi menggunakan fungsi tersebut, dan menginginkannya hilang.
Kami tidak akan menghapus fungsi setiap minggu, tetapi sekarang karena tidak mungkin dilakukan melalui CI, itu berarti kami harus menambahkan langkah manual dalam peninjauan untuk menghapus secara manual sebelum menggabungkan dan menerapkan secara otomatis. Ini juga berarti setidaknya dua pengembang memerlukan akses tulis ke fungsi produksi kami, yang kami coba hindari untuk ketenangan pikiran.
Jika kami memiliki sesuatu seperti firebase deploy --allow-deletes dan kami mempertahankan proses peninjauan yang baik, seluruh tim Pengembang kami dapat dengan bebas membuat/memperbarui/menghapus apa pun tanpa menunggu saya membuka CLI produksi di laptop saya saat saya sedang mengerjakan sesuatu lain.

Saya bisa mengerti mengapa defaultnya adalah untuk tidak menghapus, tetapi kami terkejut itu tidak mungkin/diblokir dalam mode non-interaktif, dengan asumsi kebanyakan orang dalam mode itu meninjau secara menyeluruh sebelum menggunakan seperti kami?

Terima kasih atas tanggapan Alan, saya akan membuka diskusi internal tentang ini.

Terima kasih Lauren

Kami memiliki masalah yang sama persis. Itu akan banyak membantu juga. Kami harus menghentikan penerapan otomatis kami menggunakan Google Cloud Builder karena pembaruan.

Tidak yakin apakah sudah ada yang menyarankannya.
Sebagian besar pengguna tampaknya lebih suka bendera di mana fungsi yang tidak ada akan dihapus.

Ini tidak selalu merupakan pilihan yang diinginkan semua orang.
Sebagai contoh, kita ingin memiliki sebuah flag, yang memungkinkan kita untuk mengabaikan fungsi-fungsi ini.
Jadi fungsinya tidak akan mendapatkan pembaruan atau dihapus.

Misalnya, jika seseorang membuat fungsi baru di cabang fitur dan menerapkannya menggunakan firebase deploy --only functions:functionName untuk tujuan pengujian.
Ini tidak akan memengaruhi fungsi lain dalam penggunaan produksi.

Dan kemudian seseorang mencoba untuk menyebarkan versi baru, maka pipa CI kami akan mulai dan memanggil perintah
firebase deploy --ignore-missing-functions , maka penyebaran akan memperbarui semua fungsi yang ada, membuat fungsi yang hilang, tetapi tidak akan memperbarui atau menghapus fungsi functionName .

Saya melihat manfaat dari sebuah bendera untuk mendapatkan kembali perilaku lama, jadi menurut saya kedua perilaku itu bagus untuk dimiliki.
Hapus fungsi yang hilang atau abaikan saja.

Sama disini. Karena kami memiliki banyak pemicu dan sering kali kami perlu memindahkan basis data pengguna dari proyek prod ke proyek dev untuk penyelidikan dan pemecahan masalah, kami memerlukan cara untuk menonaktifkan semua pemicu selama impor json.
Dan satu-satunya cara untuk menonaktifkan pemicu yang kami temukan adalah dengan benar-benar menghapus semua fungsi dalam proyek dev sebelum impor - secara harfiah mengomentari semua index.js, menyebarkannya ke dev, lalu mengimpor json dan kemudian mengembalikan semua fungsi kembali untuk penyelidikan lebih lanjut dari setiap masalah yang dilaporkan.

Jika ada cara untuk menonaktifkan pemicu dengan cara yang lebih ramah dengan CLI yang diperbarui, saya akan sangat menghargai masukan apa pun tentang cara mencapainya. Jika tidak, menghapus fungsi dari CLI dalam satu batch masih merupakan sesuatu yang kami andalkan.

@laurenzlong apakah ini sedang ditangani?

Kami akan segera menambahkan opsi untuk memaksa penghapusan fungsi yang hilang.
Kami telah mendengar tanggapannya, semoga ini membantu. Perilaku default akan
tetap sama.

Pada Jumat, 12 Oktober 2018, 5:06 Solomon Engel < [email protected] menulis:

@laurenzlong https://github.com/laurenzlong apakah ini sedang ditangani?


Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/firebase/firebase-tools/issues/877#issuecomment-429303503 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AAAD_npvEeL-UEG_Q5YNtNylQCi_9hKKks5ukIWtgaJpZM4WCBfg
.

@mbleigh Apakah ada opsi untuk tidak menghapus fungsi apa pun ketika saya menjalankan firebase deploy ?

Misalnya, jika saya memiliki 2 repositori terpisah dengan fungsi yang sama sekali berbeda yang semuanya disebarkan ke proyek Fungsi yang sama.

Jadi misalnya:
saya punya repo

  • "frontend", dengan fungsi:

    • bahasaRedirector

  • "belakang", dengan:

    • diUserAuthenticated

Sekarang jika saya menjalankan firebase deploy dari repo "frontend" saya hanya ingin memperbarui languageRedirector
dan jika saya menjalankan firebase deploy dari repo "backend" saya hanya ingin memperbarui onUserAuthenticated

Apakah ini mungkin?

@IchordeDionysos itu tidak mungkin, sejauh yang saya ketahui. Selama proses penerapan, fungsi diperiksa untuk mencari tahu apa yang perlu dihapus dan apa yang perlu ditambahkan. Jika ada yang "hilang" dari kode, CLI akan mencoba menghapusnya.

Apakah ini #999 sesuatu yang Anda pertimbangkan? :)
Kami benar-benar membutuhkan opsi ini karena skrip CI kami saat ini tidak akan berfungsi tanpa ini...

Saya hanya menaruh catatan pada PR itu. Meskipun itu ide yang bagus, ada sedikit lebih banyak proses internal yang harus terjadi untuk menambahkan tanda seperti ini. Saya tidak mengharapkan sesuatu terjadi dalam beberapa hari, tetapi ketahuilah bahwa itu ada di radar kami.

@IchordeDionysos Sementara itu, apakah mungkin bagi Anda untuk menggunakan --only functions:[function] pada firebase deploy agar CI Anda berfungsi? Anda dapat menemukan detail lebih lanjut di sini: https://firebase.google.com/docs/cli/#deploy_specific_functions

Bagi kami masalah sudah selesai. Kami dapat menerapkan melalui Google Cloud Builder lagi.

Inilah "retas" yang kami gunakan untuk hanya meningkatkan fungsi (tidak menghapus yang lain):

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

Juga akan menghargai memiliki dan opsi eksplisit seperti --no-delete daripada mengandalkan pertanyaan yang tidak pernah berubah

Apakah halaman ini membantu?
0 / 5 - 0 peringkat