Angular 17微前端单体仓部署:GitLab CI/CD优化与Rancher方案咨询
Angular微前端Monorepo GitLab CI/CD + Rancher独立部署方案
GitLab CI/CD 增量构建配置
1. 变更检测逻辑
- 给每个应用和关联库明确路径规则:
- app1:
apps/app1/**、libs/app1-lib/**、libs/shared-lib/** - app2:
apps/app2/**、libs/app2-lib/**、libs/shared-lib/** - app3:
apps/app3/**、libs/app3-lib/**、libs/shared-lib/**
- app1:
- 在流水线前置阶段,用
git diff对比当前提交与上一次成功构建的提交,提取变更路径集合 - 通过脚本匹配变更路径对应的应用,标记出需要构建的目标
2. 流水线作业拆分
- 流水线拆分为:变更检测 → 依赖安装 → 按需构建 → 镜像打包 → 部署
- 用GitLab的
rules:changes控制作业执行,示例:build-app1: stage: build script: - npm run build:app1 rules: - if: '$CI_COMMIT_BRANCH == "main"' changes: - apps/app1/**/* - libs/app1-lib/**/* - libs/shared-lib/**/* - 注意:公共库变更时,所有依赖它的应用都需触发构建
3. 依赖缓存优化
- 缓存
node_modules目录,避免重复安装依赖 - 每个应用的构建产物单独缓存,减少重复构建耗时
Docker镜像构建优化
1. 每个应用单独编写Dockerfile
- 在每个应用目录下创建
Dockerfile,采用多阶段构建缩小镜像体积,示例apps/app1/Dockerfile:# 构建阶段 FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build:app1 # 运行阶段 FROM nginx:alpine COPY --from=builder /app/dist/app1 /usr/share/nginx/html COPY apps/app1/nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80
2. 镜像标签策略
- 用
${CI_COMMIT_SHORT_SHA}作为镜像标签,保证每个版本唯一 - main分支构建额外打
latest标签,方便部署引用
Rancher独立部署配置
1. 每个应用单独配置Deployment和Service
- 为每个应用编写独立K8s资源文件,示例
k8s/app1/deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: app1-deployment labels: app: app1 spec: replicas: 2 selector: matchLabels: app: app1 template: metadata: labels: app: app1 spec: containers: - name: app1 image: your-registry/app1:${CI_COMMIT_SHORT_SHA} ports: - containerPort: 80 - 配套编写Service配置,暴露应用端口,后续可结合Ingress做路由
2. Rancher应用管理
- 将每个应用作为Rancher中的独立应用,用GitOps同步K8s资源文件
- 也可直接在Rancher界面导入Deployment配置,设置镜像更新策略为自动/手动触发
流水线与Rancher联动
1. 镜像推送至私有仓库
- 在流水线中添加镜像推送步骤,将构建好的镜像推送到私有容器仓库(如GitLab Container Registry)
- 确保Rancher集群拥有该仓库的镜像拉取权限
2. 自动更新Rancher部署
- 用
kubectl在流水线中更新对应应用的Deployment镜像,示例:deploy-app1: stage: deploy image: bitnami/kubectl:latest script: - kubectl set image deployment/app1-deployment app1=your-registry/app1:${CI_COMMIT_SHORT_SHA} rules: - if: '$CI_COMMIT_BRANCH == "main"' changes: - apps/app1/**/* - libs/app1-lib/**/* - libs/shared-lib/**/* dependencies: - build-app1 - push-app1-image - 也可调用Rancher API触发应用更新,替代kubectl命令
3. 环境隔离配置
- 为开发、测试、生产环境分别创建Rancher命名空间,流水线根据分支触发对应环境部署
- 例如:dev分支部署到dev命名空间,main分支部署到prod命名空间
内容的提问来源于stack exchange,提问作者vsam
相关产品推荐
相关产品推荐

