Travis和Firebase:只部署已更改的功能



当我推送到GitHub时,我正在使用Travis自动部署我的Firebase托管网站和云功能,详见此处。然而,即使对于我的云功能数量有限的小型网站来说,部署所有功能也需要相当长的时间。如果我手动部署,我将能够使用--only来精确地指定我实际更改的那些函数。有没有一种方法可以让Travis获得这些信息,从而只重建必要的功能?

https://m.youtube.com/watch?v=iyGHW4UQ_Ts

最小值30和之后

这个家伙通过将所有函数复制到云存储桶中,然后为每个文件做一个diff来解决这个问题。如果您的所有逻辑都在一个文件中,则此操作效果良好。但这不是你想要的大型项目。对于我自己的项目,我使用webpack为每个包含导入的函数创建一个文件。然后,我为该文件生成一个md5哈希,并将其保存到functions-lock.json中。在下一次运行时,我可以很容易地检查旧的哈希值,只部署更改后的函数。ci应该通过将锁文件上传到云中或进行一些git魔术来管理锁文件的状态

不幸的是,这并不是一件简单的事——Firebase CLI部署了您的所有功能,因为几乎不可能只分析代码并找出哪些功能受到影响(因为您可能需要其他文件,所以您可能更新了依赖项,但没有更改文件,等等)

我能想到的一件事可能是破解,那就是为函数或函数组命名分支。然后,您可以将git push传递到要部署的特定函数的分支,并使用该分支名称作为信号的脚本将--only functions:<fnName>传递到firebase deploy命令。这不是最迷人的解决方案,但根据你的错误程度,它可能会有所帮助。

所以这有点晚了,但漫长的部署时间已经困扰了我们一段时间。

我们的解决方案基于CircleCI,但应该可以进行调整。

首先,我们在最后一次与合并的PR中获得所有更改的文件

git log -m -1 --name-only --pretty="format:" ${process.env.CIRCLE_SHA1}

CIRCLE_SHA1是最后一次合并提交的SHA,即featurebranch->主

然后我们从/functions/目录中获取所有函数文件名,并使用

madge生成一个包含这些函数所有依赖项的数组。

接下来,我们查看从git获得的所有更改文件,并检查它们的文件名是否是特定云函数的依赖数组的一部分,如果是,我们将cloudfunction添加到另一个数组中。

一旦完成了这项工作,我们几乎就有了一个来自所有受特定文件更改影响的云函数的数组,现在我们可以将其映射到它们的实际云函数名称以进行部署。

现在,我们不再总是部署75个云函数(需要45分钟),而是只部署20个。

相关内容

  • 没有找到相关文章

最新更新