全流程上线
flowchart LR
jira(项目创建)
development(项目研发)
branch(添加模块&分支)
test(项目测试&bug修复)
artifact(文件归档)
deployTest(部署测试环境)
deploy(项目上线)
deployPre(部署生产环境)
jira --> development --> test --> deploy
development --> branch
test ---> artifact ---> deployTest
deploy --> artifact ---> deployPre
classDef boxUi fill:#ee5;
class jira,development,test,deployPre,deploy boxUi;
classDef artifactUI fill:#aea,stroke-dasharray: 4;
class artifact artifactUI;
细化节点内容
flowchart LR
jira(项目创建)
development(项目研发)
branch(添加模块&分支)
test(项目测试&bug修复)
artifact(文件归档)
subgraph deployTestEnv[部署测试环境]
deployTest(部署测试环境)
deployTest1(部署测试环境)
deployTest2(部署测试环境)
end
deploy(项目上线)
subgraph deployProdEnv[部署生产环境]
deployPre(部署生产环境)
deployProd(部署生产环境)
deployPre --> deployProd
end
jira --> development --> test --> deploy
development --> branch
test ---> artifact -..-> deployTest & deployTest1 & deployTest2
deploy --> artifact ----> deployPre
classDef boxUi fill:#ee5;
class jira,development,test,deployPre,deploy boxUi;
classDef artifactUI fill:#aea,stroke-dasharray: 4;
class artifact artifactUI;
上线流程优化
优化前端项目速度
当前现状
flowchart LR
install(项目安装)
compile(项目编译)
build(镜像构建)
deploy(镜像部署)
install --> compile --> build --> deploy
classDef boxUi fill:#aef,stroke-dasharray: 4;
class install boxUi;
==当前可优化的节点== 项目安装
70%的更改 都是业务代码的修改, 一般不会修改package.json,所以有必要将node_module进行缓存,这样可以减少安装等待时间。
1. 当前任务前端流程
安装编译部分
1. FROM 192.168.100.36:1179/xiaoke/node:12.15.0 AS builder
2. WORKDIR /home/node/app # 创建工作目录
3. COPY package.json .yarnrc /home/node/app/ # 将package.json复制到工作目录
4. RUN yarn install # 项目依赖安装
5. COPY . /home/node/app # 将项目文件复制到工作目录
6. RUN npm run build:dev # 项目开始编译
flowchart
subgraph Jenkins[Jenkins Wokspace]
subgraph compile[编译/打包机]
f1(项目编译)
preinstall(编译前置操作)
f2(项目打包)
output[/中间产物/]
artifact(docker)
end
yarnrc> yarnrc]
project[(project)]
end
yarnrc --copy--> preinstall
preinstall --> f1 --> output
output --> f2
f2 --> artifact
project --copy--> f1
classDef boxUi fill:#aef,stroke-dasharray: 4;
class node_module,preinstall boxUi;
可以优化的点
- node版本不可选择,需要单独定制。
- 安装前需要把 yarnrc/npmrc 文件复制到工作目录。
- 依赖安装 node_module目录每次都要重新生成。
2. Node_module缓存到基础镜像
优点,固定版本每个编译依赖都是完全一致的。 缺点,更新比较麻烦 理想状态:
用户无感知
的使用上一次的node_modules
将编译优化方案
-
建立编译机器
-
使用编译机器,使用编译机器对项目代码进行编译
-
node_modules: 编译机器==挂载本地工作目录==,安装时产生的node_modules会存在机器上
在不修改package.json的情况下会==大大提高安装效率==。
-
Output: 编译完成后,产出的产物也在本地工作目录。
-
产物打包,生成制品Docker
- 将当前工作目录下编译产出的Output目标复制到Docker内。
flowchart
subgraph Jenkins[Jenkins Wokspace]
subgraph compile[编译机]
f1(项目编译)
preinstall(编译前置操作)
end
subgraph package[Docker打包]
f2(项目打包)
artifact(docker)
end
node_module[(node_module)]
output[/中间产物/]
end
node_module <--volume挂载到编译机---> compile
preinstall --> f1 --> output
output --COPY--> f2
f2 --> artifact
classDef boxUi fill:#aef,stroke-dasharray: 4;
class node_module,preinstall boxUi;
上线流程
- 所有上线项目都要先经过Pre,然后现上线。
- 测试账号不应该直接部署生产环境的权限。