应届生两天干爆生产环境三次总结

2,416 阅读2分钟

概述

人在日本,硕士毕业,小公司,入职马上满一年,一次升级CI/CD的过程中捅了大篓子,网站生产环境两天被搞白屏三次,总计30分钟以上...

背景

我们CICD用的是Github Workflow, Deploy的流程大概是build assets, build push docker app, build push docker app, build push docker nginx, ...(后面和这次问题没关系暂且省略)

其中第一步build assets的主要就是yarn build, yarn install, bundle exec rake assets:precompile的过程,为了后面build push docker app中使用。

原因1

本来上述三步是在一个环境中按顺序执行的(同一个job),第一步build的assets直接在后面打包docker镜像的时候被打包进去,但是这次我的任务是把build push docker app, build push docker app变成并行,于是我进行了下面的改动:

  • 把这三步设定为不同的jobs,流程改为 a -> b, c的形式,执行完第一步并行执行后两步
  • 定义了build push docker app, build push docker nginx这两步通用的action,通过传递参数进行代码再利用

但是导致问题是build push docker app的环境和build assets独立了,也就是第一步build的assets不能在build push docker app中使用,最开始根本没意识到这个问题,直接deploy,,Vue,js,以及图像文件全部丢失,网页一片白屏。

解决方法1

在第一步中使用actions/upload-artifact@v4上传public/assets/下的文件,然后在第二步中使用actions/download-artifact@v4进行下载

原因2

是的,有原因1就有2,就当我以为十拿九稳又一次deploy的时候,一模一样的问题情况,又双叒白屏了... 这次真的仔细看了好久的log,终于发现一个很逆天的东西:

image.png

原来是我在build push docker app中调用的自定义的action第一行又写了一个- uses: actions/checkout@v4,这时因为环境中存在我好不容易下载的assets,导致与branch存在冲突,被自动remove了...

解决方法2

删除多余的actions/checkout@v4即可

总结

菜!就多练