Firebase-tools: Удаление в неинтерактивном режиме невозможно

Созданный на 17 авг. 2018  ·  18Комментарии  ·  Источник: firebase/firebase-tools

Информация о версии

"firebase-tools": "4.1.1"

Информация о платформе

OS X и Bitbucket Pipelines CI

Действия по воспроизведению

В Bitbucket pipelines CI с использованием неинтерактивного режима с переменными env
firebase use myproject
firebase deploy с 5 функциями в index.js

_В более позднем PR_
firebase deploy всего с 4 функциями в index.js

Ожидаемое поведение

  1. При полном развертывании firebase удаляется «5-я» функция, которой больше нет в последней версии index.js.
  2. Никаких ручных действий / команд CLI не требуется (как в предыдущих версиях инструментов firebase)

Фактическое поведение

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:

Самый полезный комментарий

Конечно: мы постоянно реорганизуем старые функции и часто заменяем их (например, меняем https onRequest на onCall). Нам проще удалить старую функцию и добавить новую. Иногда мы просто больше не используем функцию и хотим, чтобы она ушла.
Мы бы не удаляли функцию каждую неделю, но теперь, когда это невозможно сделать через CI, это означает, что мы должны добавить ручную проверку для ручного удаления перед слиянием и автоматическим развертыванием. Это также означает, что по крайней мере два разработчика нуждаются в доступе для записи к нашим производственным функциям, от которых мы пытаемся избавиться для вашего спокойствия.
Если бы у нас было что-то вроде firebase deploy --allow-deletes и мы поддерживали бы хороший процесс проверки, вся наша команда разработчиков могла бы свободно создавать / обновлять / удалять что угодно, не дожидаясь, пока я открою рабочий интерфейс командной строки на моем ноутбуке, пока я над чем-то работаю. еще.

Я могу понять, почему по умолчанию не удаляется удаление, но мы удивлены, что это невозможно / заблокировано в неинтерактивном режиме, если предположить, что большинство людей в этом режиме тщательно проверяют перед развертыванием, как мы?

Все 18 Комментарий

Привет, это намеренное поведение, поскольку мы получили много отзывов о том, что пользователям не нравится, как интерфейс командной строки автоматически удаляет их функции. Итак, теперь мы требуем подтверждения от пользователя для удаления, что не может быть выполнено в неинтерактивном режиме.

Вот почему в выпуске основной версии произошел скачок, чтобы указать на критическое изменение в поведении.

@laurenzlong можно ли добавить флаг, разрешающий удаление в неинтерактивном режиме? Удаление функций вручную в CLI для нас менее безопасно и неудобно по сравнению с хорошей политикой обзора / слияния + развертыванием CI

Не могли бы вы еще немного расширить свое обоснование? Часто ли вы удаляете функции во время CI?

Конечно: мы постоянно реорганизуем старые функции и часто заменяем их (например, меняем https onRequest на onCall). Нам проще удалить старую функцию и добавить новую. Иногда мы просто больше не используем функцию и хотим, чтобы она ушла.
Мы бы не удаляли функцию каждую неделю, но теперь, когда это невозможно сделать через CI, это означает, что мы должны добавить ручную проверку для ручного удаления перед слиянием и автоматическим развертыванием. Это также означает, что по крайней мере два разработчика нуждаются в доступе для записи к нашим производственным функциям, от которых мы пытаемся избавиться для вашего спокойствия.
Если бы у нас было что-то вроде firebase deploy --allow-deletes и мы поддерживали бы хороший процесс проверки, вся наша команда разработчиков могла бы свободно создавать / обновлять / удалять что угодно, не дожидаясь, пока я открою рабочий интерфейс командной строки на моем ноутбуке, пока я над чем-то работаю. еще.

Я могу понять, почему по умолчанию не удаляется удаление, но мы удивлены, что это невозможно / заблокировано в неинтерактивном режиме, если предположить, что большинство людей в этом режиме тщательно проверяют перед развертыванием, как мы?

Спасибо за отзыв, Алан, я начну внутреннее обсуждение этого вопроса.

Спасибо, Лорен 🙌

У нас точно такая же проблема. Это тоже очень поможет. Из-за обновления нам пришлось отказаться от автоматического развертывания с помощью Google Cloud Builder.

Не уверен, что кто-то это уже предлагал.
Большинство пользователей, похоже, предпочитают флаг, при котором функции, отсутствующие в списке, будут удалены.

Это не всегда вариант, который хотят иметь все.
Например, мы хотели бы иметь флаг, который позволяет нам просто игнорировать эти функции.
Таким образом, функции не будут обновляться и не удаляться.

Например, если кто-то создал новую функцию в ветке функций и развернул ее с помощью firebase deploy --only functions:functionName в целях тестирования.
Это не повлияет на другие функции в производственной среде.

А затем кто-то пытается развернуть новую версию, тогда наш конвейер CI запускается и вызывает команду
firebase deploy --ignore-missing-functions , тогда развертывание обновит все существующие функции, создаст недостающие функции, но не будет обновлять или удалять функцию functionName .

Я вижу преимущество флага в том, чтобы вернуть прежнее поведение, поэтому, на мой взгляд, было бы здорово иметь оба поведения.
Либо удалите недостающие функции, либо просто проигнорируйте их.

То же самое. Поскольку у нас много триггеров, и часто нам нужно переместить базу данных пользователей из проекта в проект разработчика для исследования и устранения неполадок, нам нужен способ отключить все триггеры во время импорта json.
И единственный способ отключить триггеры, которые мы придумали, - это фактически удалить все функции в проекте dev перед импортом - буквально закомментировать все index.js, развернуть его в dev, затем импортировать json, а затем вернуть все функции обратно для дальнейшее расследование любых обнаруженных проблем.

Если есть способ отключить триггеры более удобным способом с помощью обновленного интерфейса командной строки, я был бы очень признателен за любую информацию о том, как этого добиться. В противном случае мы по-прежнему полагаемся на удаление функций из интерфейса командной строки в пакетном режиме.

@laurenzlong , это решается?

Скоро мы добавим возможность принудительного удаления отсутствующих функций.
Мы слышали отзывы, надеюсь, это поможет. Поведение по умолчанию будет
остаются такими же.

Пт, 12 октября 2018 г., 5:06 Соломон Энгель < [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 отдельных репозитория с совершенно разными функциями, которые все развертываются в одном и том же проекте функций.

Так, например:
У меня есть репо

  • "интерфейс", с функцией:

    • languageRedirector

  • "backend", с:

    • onUserAuthenticated

Теперь, если я запустил firebase deploy из "внешнего" репозитория, я хочу обновить только languageRedirector
и если я запустил firebase deploy из "backend" репо, я хочу обновить только onUserAuthenticated

Это возможно?

@IchordeDionysos , насколько мне известно, это невозможно. В процессе развертывания функции проверяются, чтобы выяснить, что нужно удалить, а что добавить. Если один из них «отсутствует» в коде, интерфейс командной строки попытается удалить его.

Вы подумываете об этом # 999? :)
Нам действительно нужна эта опция, так как наш CI-скрипт в настоящее время не будет работать без нее ...

Я просто поставил отметку об этом пиаре. Хотя это хорошая идея, для добавления такого флага должен произойти немного больше внутреннего процесса. Я бы не ожидал, что что-то случится через несколько дней, но знаю, что это на нашем радаре.

@IchordeDionysos А пока вы можете использовать --only functions:[function] на firebase deploy чтобы заставить ваш CI работать? Более подробную информацию можно найти здесь: https://firebase.google.com/docs/cli/#deploy_specific_functions.

Для нас вопрос решен. Мы снова можем выполнить развертывание с помощью Google Cloud Builder.

Вот «хак», который мы используем только для добавления функции (не удаления других):

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

Также был бы признателен за наличие явной опции, такой как --no-delete вместо того, чтобы полагаться на то, что вопрос никогда не меняется 😏

Была ли эта страница полезной?
0 / 5 - 0 рейтинги