戴志强1
Published on 2026-05-28 / 17 Visits
0
0

从app版本管理到生成h5镜像

从app版本管理到生成h5镜像

1. 使用场景背景

  1. 项目现场没有部署kubesphere 的流水线。仅能使用devops-biz 生成APK;
  2. 项目现场需要生成一个对应的H5页面, 供实施顾问测试;

2. 该工具使用前置条件

  1. 安装有kubectl, docker 的宿主机(推荐master节点);
  2. 已安装好devops-biz 的前后端, devops-biz 要求是 20260528 之后的版本。

3. 使用流程

3.1 生成APK

image-zcWQ.png

3.2 记录生成apk 的appCode

例子为: nationstar2026052805496845

image-ZftW.png

3.3 获取devops-biz 的PodName

image-xEjp.png

3.4 编辑 copy-h5-build.sh 脚本

更新 DEVOPS_BIZ_POD_NAME 和 DOCKER_REGISTRY_REPO

#!/bin/bash -x
# 对应的devops-biz PodName, 这里devops-biz升级后会变化,需要注意
DEVOPS_BIZ_POD_NAME="devops-biz-88c5554fd-tsrbh"
# 项目现场使用的k8s镜像仓库
DOCKER_REGISTRY_REPO="192.168.168.207:30002"
APP_CODE=${1:-nationstar2026052805496845}
VERSION=`date +"%Y-%m-%d.%H-%M-%S"`
set -e
rm -rf dist || true
kubectl -n imom cp ${DEVOPS_BIZ_POD_NAME}:/Android/code/h5-release/${APP_CODE}-dist.tar.gz ./${APP_CODE}-dist.tar.gz
tar -xf ${APP_CODE}-dist.tar.gz
docker build . -t ${DOCKER_REGISTRY_REPO}/imom/app-ui-${APP_CODE}:v${VERSION}
docker push ${DOCKER_REGISTRY_REPO}/imom/app-ui-${APP_CODE}:v${VERSION}

3.5 构建app-ui h5镜像
# 参数输入appCode
./copy-h5-build.sh  nationstar2026052806202150
3.6 获取app-ui 的镜像地址

使用获取到镜像地址更新到app-ui 的工作负载。

4. app-ui 部署配置

kind: Deployment
apiVersion: apps/v1
metadata:
  name: app-ui
  namespace: imom
  labels:
    app: kubesphere
    component: app-ui
    tier: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kubesphere
      component: app-ui
      tier: backend
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: kubesphere
        component: app-ui
        pod-template-hash: 56b5d7c88b
        tier: backend
      annotations:
        kubesphere.io/creator: daizhiqiang
        kubesphere.io/imagepullsecrets: '{}'
        kubesphere.io/restartedAt: '2023-12-25T08:12:55.200Z'
    spec:
      containers:
        - name: app-ui
          image: '192.168.168.207:30002/imom/app-ui-nationstar2026052806202150:v2026-05-28.14-30-14'
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          env:
            - name: CACHE_IGNORE
              value: js|html
            - name: CACHE_PUBLIC_EXPIRATION
              value: 3d
            - name: VITE_BASE_URL
              value: 'http://192.168.168.207:32755/imomapi'
          resources:
            limits:
              cpu: 300m
              memory: 600Mi
            requests:
              cpu: 100m
              memory: 100Mi
          readinessProbe:
            httpGet:
              path: /
              port: 80
              scheme: HTTP
            timeoutSeconds: 10
            periodSeconds: 5
            successThreshold: 1
            failureThreshold: 30
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: Always
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      securityContext: {}
      imagePullSecrets:
        - name: default-secret
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600

---
kind: Service
apiVersion: v1
metadata:
  name: app-ui
  namespace: imom-testing
  labels:
    app: kubesphere
    component: app-ui
spec:
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80
  selector:
    app: kubesphere
    component: app-ui
    tier: backend
  type: NodePort
  sessionAffinity: None
  externalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  internalTrafficPolicy: Cluster


Comment