项目回滚重新上线,新发布的项目有效(2024-4-28 17:55)。
之前流程如下。
- 打包生成产物 A
- 拷贝 A 到
nginx-build-files
- 拷贝
nginx-build-files
中当前域名下所有文件到workspace
- 在
workspace
中创建Dockerfile、nginx.conf、default.conf、logrotate-nginx
- 在
workspace
中构建镜像,并推送 - 更新模版集,发布到集群
需要将产物放到 git
仓库中,好处如下:
- 安全,有备份,不用担心误删,所有项目丢失
- 有历史记录,易追溯到任一版本、易回滚
- 可视化管理,易维护,镜像大小易控制,比如之前很多
sourcemap
、.gz
文件以及没用的js/css
文件都可以很轻易的删除
发布流程改动:
- 拷贝产物 A 到
nginx-build-files
后,增加git commit
和git push
,用流水线构建 ID 作为tag
- 生成操作记录时,将上面的流水线构建 ID 连同其他发布配置,一起存起来,即
pipelineRunId
,这一步其实已有
回滚时:
- 新建
/data/landun/revert
作为统一的回滚目录,并将之前的多例回滚改为单例回滚,防止互相影响 - 从
nginx-build-files
中拷贝域名文件,到当前目录 - 从
/data/landun/revert
中切换tag
,并拷贝IMAGE_NAME
到当前目录的域名下 - 从
/data/landun/revert
切回master
,拉最新代码,并拷贝回工作目录的文件,切新分支,并push
- 从
workspace
重新生成镜像,发布集群
几个核心要点:
- 要有单独的回滚目录,不能用发布目录,防止切分支的时候,有人正在发布,导致发布成过去的项目
- 永远不要在
nginx-build-files
目录下,进行git reset
或者git checkout
操作,原因同上 - 回滚要有 git 记录,所以
/data/landun/revert
切完 tag 并拷贝出文件后,再切成master
,拉最新代码,并拷贝回工作目录的文件,切新分支,并push
- 要注意发布到域名根目录的回滚
总结下升级后的整体好处:
- 安全,有备份
- 有记录,可回溯,可回滚
- 回滚也有记录,可查看是否回滚错误
另外,通过删除镜像中无用的 .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/ dest
与 cp -r img/* dest
的区别:
加星号
cp("-R", "__config/img/*", 'dev')
复制整个img
目录下的文件到dev
下,不包含img
目录
不加星号
cp("-R", "__config/img/", 'dev')
复制整个img
目录到dev
下,包含img
目录