项目回滚重新上线,新发布的项目有效(2024-4-28 17:55)。

之前流程如下。

  1. 打包生成产物 A
  2. 拷贝 A 到 nginx-build-files
  3. 拷贝 nginx-build-files 中当前域名下所有文件到 workspace
  4. workspace 中创建 Dockerfile、nginx.conf、default.conf、logrotate-nginx
  5. workspace 中构建镜像,并推送
  6. 更新模版集,发布到集群

需要将产物放到 git 仓库中,好处如下:

  • 安全,有备份,不用担心误删,所有项目丢失
  • 有历史记录,易追溯到任一版本、易回滚
  • 可视化管理,易维护,镜像大小易控制,比如之前很多 sourcemap.gz 文件以及没用的 js/css 文件都可以很轻易的删除

发布流程改动:

  1. 拷贝产物 A 到 nginx-build-files 后,增加 git commitgit push,用流水线构建 ID 作为 tag
  2. 生成操作记录时,将上面的流水线构建 ID 连同其他发布配置,一起存起来,即 pipelineRunId,这一步其实已有

回滚时:

  1. 新建 /data/landun/revert 作为统一的回滚目录,并将之前的多例回滚改为单例回滚,防止互相影响
  2. nginx-build-files 中拷贝域名文件,到当前目录
  3. /data/landun/revert 中切换 tag,并拷贝 IMAGE_NAME 到当前目录的域名下
  4. /data/landun/revert 切回 master,拉最新代码,并拷贝回工作目录的文件,切新分支,并 push
  5. workspace 重新生成镜像,发布集群

几个核心要点:

  1. 要有单独的回滚目录,不能用发布目录,防止切分支的时候,有人正在发布,导致发布成过去的项目
  2. 永远不要在 nginx-build-files 目录下,进行 git reset 或者 git checkout 操作,原因同上
  3. 回滚要有 git 记录,所以 /data/landun/revert 切完 tag 并拷贝出文件后,再切成 master,拉最新代码,并拷贝回工作目录的文件,切新分支,并 push
  4. 要注意发布到域名根目录的回滚

总结下升级后的整体好处:

  • 安全,有备份
  • 有记录,可回溯,可回滚
  • 回滚也有记录,可查看是否回滚错误

另外,通过删除镜像中无用的 .map.gz, .js, .css 文件等,减少 130M,减少构建推送镜像时间1分钟

之前的构建并推送时间:

现在的构建并推送时间:

大小对比:

几个变量:

IMAGE_NAME: "pvpesport.web.user.feature.story-team-create"
IMAGE_TAG: "1714126074270-825"
IMAGE_URL: "mirrors.tencent.com/pmd-mobile/pvpesport.web.user.feature.story-team-create"

中间的 pmd-mobile 是命名空间

cp -r img/ destcp -r img/* dest 的区别:

加星号

cp("-R", "__config/img/*", 'dev') 复制整个img目录下的文件到dev下,不包含img目录

不加星号

cp("-R", "__config/img/", 'dev') 复制整个img目录到dev下,包含img目录