You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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/**
  • 在流水线前置阶段,用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:20:18