Firebase-tools: A exclusão no modo não interativo não é possível

Criado em 17 ago. 2018  ·  18Comentários  ·  Fonte: firebase/firebase-tools

Informação da versão

"firebase-tools": "4.1.1"

Informação da plataforma

OS X e Bitbucket Pipelines CI

Passos para reproduzir

Em pipelines de Bitbucket CI, usando o modo não interativo com variáveis ​​env
firebase use myproject
firebase deploy com 5 funções em index.js

_Em um PR posterior_
firebase deploy com apenas 4 funções em index.js

Comportamento esperado

  1. A implantação completa do Firebase remove a função "5ª" que não está mais no index.js mais recente
  2. Nenhuma etapa manual / comandos CLI são necessários (como nas versões anteriores das ferramentas do firebase)

Comportamento real

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

Comentários muito úteis

Claro: estamos constantemente refatorando funções antigas e frequentemente substituindo (trocando https onRequest por onCall, por exemplo). É mais fácil excluir a função antiga e adicionar uma nova. Às vezes, simplesmente não estamos mais usando a função e queremos que ela desapareça.
Não excluiríamos uma função todas as semanas, mas agora que não é possível fazer via CI, isso significa que temos que adicionar uma etapa manual na revisão para excluir manualmente antes de mesclar e implantar automaticamente. Isso também significa que pelo menos dois desenvolvedores precisam de acesso de gravação às nossas funções de produção, das quais estamos tentando nos livrar para ficarmos tranquilos.
Se tivéssemos algo como firebase deploy --allow-deletes e mantivéssemos um bom processo de revisão, toda a nossa equipe de desenvolvimento pode criar / atualizar / excluir livremente qualquer coisa sem esperar que eu abra a CLI de produção em meu laptop enquanto estou trabalhando em algo outro.

Eu posso entender por que o padrão seria não excluir, mas estamos surpresos que não seja possível / bloqueado no modo não interativo, assumindo que a maioria das pessoas nesse modo está revisando completamente antes de implementar como nós.

Todos 18 comentários

Olá, este é um comportamento intencional, pois recebemos muitos comentários de que os usuários não gostaram de como a CLI excluiu automaticamente suas funções. Portanto, agora exigimos a confirmação do usuário para exclusões, o que não pode ser feito de forma não interativa.

É por isso que o lançamento foi um choque de versão principal, para indicar uma mudança significativa no comportamento.

@laurenzlong poderia ser adicionado um sinalizador para permitir exclusões no modo não interativo? Excluir funções manualmente na CLI para nós é muito menos seguro e inconveniente do que uma boa revisão / política de mesclagem + implantações de CI

Você poderia expandir seu raciocínio um pouco mais? Você exclui funções com frequência durante o IC?

Claro: estamos constantemente refatorando funções antigas e frequentemente substituindo (trocando https onRequest por onCall, por exemplo). É mais fácil excluir a função antiga e adicionar uma nova. Às vezes, simplesmente não estamos mais usando a função e queremos que ela desapareça.
Não excluiríamos uma função todas as semanas, mas agora que não é possível fazer via CI, isso significa que temos que adicionar uma etapa manual na revisão para excluir manualmente antes de mesclar e implantar automaticamente. Isso também significa que pelo menos dois desenvolvedores precisam de acesso de gravação às nossas funções de produção, das quais estamos tentando nos livrar para ficarmos tranquilos.
Se tivéssemos algo como firebase deploy --allow-deletes e mantivéssemos um bom processo de revisão, toda a nossa equipe de desenvolvimento pode criar / atualizar / excluir livremente qualquer coisa sem esperar que eu abra a CLI de produção em meu laptop enquanto estou trabalhando em algo outro.

Eu posso entender por que o padrão seria não excluir, mas estamos surpresos que não seja possível / bloqueado no modo não interativo, assumindo que a maioria das pessoas nesse modo está revisando completamente antes de implementar como nós.

Obrigado pelo feedback Alan, vou abrir a discussão internamente sobre isso.

Obrigado Lauren 🙌

Temos exatamente o mesmo problema. Isso ajudaria muito também. Tivemos que desistir de nossas implantações automatizadas usando o Google Cloud Builder por causa da atualização.

Não tenho certeza se alguém já sugeriu isso.
A maioria dos usuários parece preferir um sinalizador onde as funções não presentes serão excluídas.

Essa nem sempre é a opção que todos desejam.
Por exemplo, gostaríamos de ter um sinalizador, o que nos permite simplesmente ignorar essas funções.
Assim, as funções não serão atualizadas ou excluídas.

Por exemplo, se alguém criou uma nova função em um branch de recursos e a implantou usando firebase deploy --only functions:functionName para fins de teste.
Isso não afetará nenhuma outra função em uso de produção.

E então alguém tenta implantar uma nova versão, então nosso pipeline de CI seria iniciado e chamaria o comando
firebase deploy --ignore-missing-functions , então a implantação atualizaria todas as funções presentes, criaria funções ausentes, mas não atualizaria ou excluiria a função functionName .

Eu vejo o benefício de um sinalizador para recuperar o comportamento antigo, então ambos os comportamentos seriam ótimos em minha opinião.
Exclua as funções ausentes ou simplesmente as ignore.

Mesmo aqui. Como temos muitos gatilhos e, muitas vezes, precisamos mover o banco de dados do usuário do projeto de produção para o projeto de desenvolvimento para investigação e solução de problemas, precisamos desabilitar todos os gatilhos durante a importação json.
E a única maneira de desabilitar os gatilhos que criamos é excluir todas as funções no projeto dev antes da importação - literalmente comente todos os index.js, implante-os no dev, importe o json e, em seguida, reverta todas as funções de volta para investigação adicional de quaisquer problemas relatados.

Se houver uma maneira de desativar os gatilhos de uma maneira mais amigável com a CLI atualizada, eu agradeceria muito qualquer contribuição sobre como fazer isso. Caso contrário, remover funções da CLI em um lote ainda é algo em que contamos.

@laurenzlong isso está sendo resolvido?

Estaremos adicionando uma opção para forçar exclusões de funções ausentes em breve.
Ouvimos o feedback, espero que isso ajude. O comportamento padrão irá
permanece o mesmo.

Na sexta-feira, 12 de outubro de 2018, 5:06, Solomon Engel < [email protected] escreveu:

@laurenzlong https://github.com/laurenzlong isso está sendo resolvido?

-
Você está recebendo isto porque está inscrito neste tópico.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/firebase/firebase-tools/issues/877#issuecomment-429303503 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AAAD_npvEeL-UEG_Q5YNtNylQCi_9hKKks5ukIWtgaJpZM4WCBfg
.

@mbleigh Existe alguma opção para não excluir nenhuma função quando executo firebase deploy ?

Por exemplo, se eu tiver 2 repositórios separados com funções totalmente diferentes, todos implantados no mesmo projeto de funções.

Então, por exemplo:
Eu tenho repos

  • "frontend", com a função:

    • languageRedirector

  • "backend", com:

    • onUserAuthenticated

Agora, se eu executar firebase deploy do repositório "front-end", quero atualizar apenas languageRedirector
e se eu executar firebase deploy do repositório "back-end", quero atualizar apenas onUserAuthenticated

Isso é possível?

@IchordeDionysos isso não é possível, tanto quanto eu sei. Durante o processo de implantação, as funções são inspecionadas para descobrir o que precisa ser removido e o que precisa ser adicionado. Se algum estiver "faltando" no código, a CLI tentará excluí-lo.

Este # 999 é algo que você está considerando? :)
Nós realmente precisamos dessa opção, pois nosso script de CI atualmente não funciona sem isso ...

Acabei de colocar uma nota sobre esse PR. Embora seja uma boa ideia, há um pouco mais de processo interno que precisa acontecer para adicionar um sinalizador como este. Eu não esperaria que algo acontecesse em alguns dias, mas saiba que está em nosso radar.

@IchordeDionysos Enquanto isso, é possível usar --only functions:[function] em firebase deploy para fazer seu IC funcionar? Você pode encontrar mais detalhes aqui: https://firebase.google.com/docs/cli/#deploy_specific_functions

Para nós, o problema está resolvido. Podemos implantar novamente por meio do Google Cloud Builder.

Aqui está o "hack" que estamos usando apenas para a função de upsert (não excluir outras):

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

Também gostaria de ter uma opção explícita como --no-delete vez de confiar que a questão nunca muda 😏

Esta página foi útil?
0 / 5 - 0 avaliações