webpack + ModuleFederation项目结合 jenkins + WebHooks + 文件服务器 实现项目中各个仓库的版本管理

274 阅读1分钟

本文主要是介绍下开发流程,以及要解决的问题

问题

项目中遇到的问题如下:

  • 自动化构建的时机
  • 项目独立构建,独立更新
  • 项目产物如何存储
  • 项目版本如何划分

项目版本

在大型项目中,拆分的项目会非常多,我实践的项目会有20+,参与开发的人员会5+。再加上定制化开发等场景,项目数量和人员数量会快速增加,为了让开发人员能够快速定位到要开发的功能,项目的版本管理就至关重要。

版本格式

我参考的是npm的语意化版本规范

场景稳定版本目标版本开发版本
新业务迭代开发v1.0.0v1.1.0v1.1.0-x
hotfixv1.0.0v1.0.1v1.0.1-x
临时演示v1.0.0v1.0.0-dz.xv1.0.0-dz.x

稳定版本:已经发布的版本
目标版本:下一个要发布的版本
开发版本:正在开发、测试的版本

开发过程中,开发人员通过使用npm version xxx来进行版本升级,通过 npm 的 preversion hook 进行版本校验提示。preversion hook

package.json

{
    scripts:{
        "preversion": "preversion.js",
    }
}

自动化流程

开发版本升级,存储

sequenceDiagram
开发者->>git仓库: npm version xxx
git仓库->>git仓库: add tag
git仓库->>jenkins: webhook 通知
jenkins->>jenkins:构建
jenkins->>文件服务器:打包上传构建产物

文件服务器中,是根据项目类型(app、container)+ 版本号进行分类的

本地同步所有项目最新版本

sequenceDiagram
开发者->>下载脚本: 执行
下载脚本->>版本配置文件: 读取
版本配置文件-->>下载脚本: 返回版本信息
下载脚本->>文件服务器: 下载对应项目类型的版本打包文件
文件服务器-->>下载脚本: 返回下载文件流
下载脚本-->>开发者: 成功下载
版本配置文件
{
  "type": "project",
  "container": {
    "name": "container",
    "version": "v1.0.0"
  },
  "apps": [
    {
      "name": "foundation",
      "packageName": "a-foundation",
      "version": "v1.9.0"
    },
    {
      "name": "login",
      "version": "v1.2.2"
    }
  ]
}
下载文件版本匹配规则

配置文件中会指定前三位版本,下载时会匹配代码版本

配置文件版本文件服务器版本list下载版本
v1.0.0v1.0.0-0,v1.0.0-1v1.0.0-1
v1.0.0v1.0.0-0,v1.0.0-1,v1.0.0v1.0.0
v1.0.0v1.0.0-0,v1.0.0-1,v1.0.0,v1.1.0v1.0.0
v1.0.0v1.0.0-0,v1.0.0-1,v1.0.0,v2.0.0v1.0.0

相关的代码需要结合具体场景来实现,具体情况具体分析