从app版本管理到生成h5镜像
1. 使用场景背景
- 项目现场没有部署kubesphere 的流水线。仅能使用devops-biz 生成APK;
- 项目现场需要生成一个对应的H5页面, 供实施顾问测试;
2. 该工具使用前置条件
- 安装有kubectl, docker 的宿主机(推荐master节点);
- 已安装好devops-biz 的前后端, devops-biz 要求是 20260528 之后的版本。
3. 使用流程
3.1 生成APK

3.2 记录生成apk 的appCode
例子为: nationstar2026052805496845

3.3 获取devops-biz 的PodName

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