Gavin,随笔技术
EN

每次构建都有自己的位置,项目发布不再互相覆盖

我手里的前端项目不少。每个项目写完以后,都有一串差不多的事:跑构建、放静态文件、配域名、确认线上版本,出问题时再找能回去的那一版。

以前这些东西散在 GitHub Actions、OSS、服务器配置和我自己的记忆里。只发一次没什么,过几个月再回来,就要重新确认这个项目当时到底是怎么上线的。

meow 就是拿来管这整段发布过程的。它最早从 OSS 上的静态文件版本化开始,现在已经变成了一个前端发布平台。

一个项目,从 push 到上线

一个项目接进 meow 以后,我会把仓库、域名、运行方式和要用的脚本配好。以后打开项目页,就可以发起构建。项目自己的流程负责把页面构建出来,meow 接收结果,留下版本记录和可以直接打开的地址。

构建跑到哪里、现在线上是哪一版、有没有候选版本,都在同一个页面。常用脚本也可以放进脚本库,按项目启用,不用在几个仓库里各抄一份。

这些东西单独看都不新鲜。放到一起以后,新项目接进来不再是重新拼一套发布方式,而是加进 meow 已经在管的流程里。

版本不是记录里的一个数字

meow 里的每次构建都会独立保留。v21 和 v22 各有自己的文件和地址,新版本来了也不会把旧版本盖掉。要对比两个页面,直接打开两个版本;要回退,也不需要把旧代码重新构建一遍。

旧版本和新版本都留在原位,线上可以切到需要的那一版

这件事真救过一次 ashita。导航发布出问题时,我临时把 v55 重新切回线上,页面很快恢复,没有去服务器上翻旧文件。这里的版本记录不只是历史,旧版本仍然可以重新上线。

直接上线,或者先做灰度

最近 meow 又加了候选版本和条件灰度。新构建可以照常直接上线,也可以先留成候选版本。候选版有自己的预览地址,还可以只让符合条件的一部分请求进入;确认没问题以后再全量发布,不满意就暂停或者结束。

灰度只是发布平台里新补上的一段。项目、构建、版本、域名、脚本、预览、上线和回退仍然在同一条线上,失败的构建也不会把原来的线上版本挤掉。

现在 meow 自己和 ashita 都接在这套流程里。以后再做新的前端项目,把它接进 meow 就行,之前那些零散配置不用再重来一遍。

meow 的源码在 GitHub:meow (opens in a new tab) · meow-api (opens in a new tab) · meow-release (opens in a new tab)。这个博客就是靠它上线的。