49 lines
1.9 KiB
YAML
49 lines
1.9 KiB
YAML
name: Build and Push Next.js to Private Registry
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
build-and-push:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
# 替换 actions/checkout@v4:直接利用 Runner 容器自带的 git 命令克隆
|
|
# Gitea 会自动注入环境变量 $GITEA_SERVER_URL, $GITEA_REPOSITORY, $GITEA_SHA
|
|
- name: 检查代码 (本地原生 Git)
|
|
run: |
|
|
git clone ${{ github.server_url }}/${{ github.repository }}.git .
|
|
git checkout ${{ github.sha }}
|
|
|
|
- name: 生成短哈希版本号
|
|
id: vars
|
|
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
|
|
|
- name: 构建并推送镜像 (本地 Docker)
|
|
run: |
|
|
IMAGE_NAME="192.168.10.236:31051/nextjs-app"
|
|
SHA_TAG="${{ steps.vars.outputs.sha_short }}"
|
|
docker build -t ${IMAGE_NAME}:latest -t ${IMAGE_NAME}:${SHA_TAG} -f ./Dockerfile .
|
|
docker push ${IMAGE_NAME}:latest
|
|
docker push ${IMAGE_NAME}:${SHA_TAG}
|
|
|
|
|
|
# 新增步骤:因为在同一台机器,直接在本地运行 kubectl 部署
|
|
- name: 本地触发 K3s 灰度发布
|
|
run: |
|
|
SHA_TAG="${{ steps.vars.outputs.sha_short }}"
|
|
|
|
echo "正在应用本地基础设施配置..."
|
|
# 1. 应用 /home/ai/k3s 目录下的资源清单
|
|
kubectl apply -f /home/ai/k3s/nextjs-traefik-gray.yaml
|
|
|
|
echo "正在更新灰度版本镜像至: ${SHA_TAG}"
|
|
# 2. 动态修改灰度版的镜像标签,触发 Traefik 灰度滚动更新
|
|
kubectl set image deployment/nextjs-app-canary nextjs=192.168.10.236:31051/nextjs-app:${SHA_TAG}
|
|
|
|
# 3. 等待灰度 Pod 启动成功(超时时间 60 秒)
|
|
kubectl rollout status deployment/nextjs-app-canary --timeout=60s
|
|
|
|
echo "本地灰度发布成功!当前新标签 [${SHA_TAG}] 已切入 Traefik 10% 流量。" |