在我看来,针对Google发行版的Actions与Firebase Functions的发行方式不匹配。在AoG中,我可以对Dialogflow实现的“版本”进行快照,并在闲暇时将它们部署到Alpha,Beta和Release中。这些快照包括我的实现的URL。假设我希望通过Alpha,Beta和Release来保持Action的行为一致,那么我需要在快照的整个生命周期内都保持实现。在我看来,这意味着我需要为每个发行版(而不是每个环境)分别部署我的实现。
使用Firebase Functions,我的函数名称作为模块导出硬编码到我的JavaScript文件中。每次部署时,以前的部署都会被覆盖。我开始着手维护多个项目,但是必须为每个发行版创建一个新项目,并且在它们之间共享数据(在Firestore中)变得很麻烦。我尝试在功能名称中粘贴发行版号,但Firebase Functions所做的另一件事是删除已部署但现在从源中丢失的所有旧功能。这意味着我不能在不认真搞清楚我的源代码/ CI的情况下离开一堆版本。
App Engine具有一流的“版本”概念,其中每个部署都有自己的URL。这很好地映射到AoG的快照:为了进行开发,我可以将实现Webhook URL指向实现的基本URL(例如https://my-fulfillment.appspot.com/),然后在准备发布时将其锁定到App Engine版本(例如https://20180708t215225-dot-my-fulfillment.appspot.com/)。我可以无限期地部署此版本并部署新版本,而不会影响现在锁定的快照的行为。看来这里的App Engine模型与AoG完美结合,而Firebase Functions却没有。
我如何管理我的Firebase Function的版本(作为对Google上的Action的实现),以使给定的AoG版本始终获得相同的实现?
答案 0 :(得分:-1)
还没有针对Firebase Cloud Functions的直接版本控制,但是可以避免使用不同项目的方法是导出名称为Versioning的云功能,以便每个版本甚至都有单独的日志( Alpha,Beta或正式版)。
exports.myCloudFunction_V1 = functions.https.onRequest(app)
exports.myCloudFunction_V2 = functions.https.onRequest(app)
exports.myCloudFunction_V3 = functions.https.onRequest(app)
或
exports.myCloudFunction_aplha = functions.https.onRequest(app)
exports.myCloudFunction_beta = functions.https.onRequest(app)
exports.myCloudFunction_prod = functions.https.onRequest(app)
只要记住要在每个版本的分支之间进行项目工作,并且要在它们之间进行部署时,只需要将PR从一个分支发送到另一个分支即可。
Git使您能够更改版本之间的代码结构。