Files
zt-closet-backend/.gitea/workflows/mysqlup.yaml
T
zhengchiliu d1a5894c9a
构建并部署 / build-and-deploy (push) Canceled after 1m10s
bugfix:修复bug
2026-09-11 22:27:46 +08:00

90 lines
2.7 KiB
YAML

name: 数据库迁移 - 升级
on:
workflow_dispatch:
inputs:
check_only:
description: '只查看当前版本和脏库状态(执行 version,不改动数据库)'
required: false
default: false
type: boolean
concurrency:
group: migrate
cancel-in-progress: false
env:
REGISTRY: git.lzcwy.cn
IMAGE: git.lzcwy.cn/zhengchiliu/zt-closet-backend
MIGRATE_TAG: migrate
jobs:
migrate-up:
runs-on: ubuntu-latest
steps:
- name: 拉取代码
uses: actions/checkout@v4
- name: 确认 docker 可用
run: |
docker version --format 'Server: {{.Server.Version}}'
- name: 决定动作
id: args
env:
IN_CHECK: ${{ gitea.event.inputs.check_only }}
run: |
if [ "${IN_CHECK:-false}" = "true" ]; then
echo "action=version" >> "$GITHUB_OUTPUT"
echo "动作: version(只读)"
else
echo "action=up" >> "$GITHUB_OUTPUT"
echo "动作: up"
fi
- name: 登录 Gitea 镜像仓库
env:
REGISTRY_USER: ${{ secrets.ZT_CLOSET_REGISTRY_USER }}
REGISTRY_TOKEN: ${{ secrets.ZT_CLOSET_REGISTRY_TOKEN }}
run: |
echo "$REGISTRY_TOKEN" | docker login "$REGISTRY" -u "$REGISTRY_USER" --password-stdin
- name: 构建并推送迁移镜像
run: |
docker build \
-f scripts/dockerfile/Dockerfile.migrate \
-t "$IMAGE:$MIGRATE_TAG" \
.
docker push "$IMAGE:$MIGRATE_TAG"
- name: 生产机执行(结束即删容器)
env:
SSH_KEY: ${{ secrets.ZT_CLOSET_PROD_SSH_KEY }}
SSH_HOST: ${{ vars.ZT_CLOSET_PROD_SSH_HOST }}
SSH_USER: ${{ vars.ZT_CLOSET_PROD_SSH_USER }}
ACTION: ${{ steps.args.outputs.action }}
run: |
mkdir -p ~/.ssh && chmod 700 ~/.ssh
printf '%s\n' "$SSH_KEY" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
SSHOPT="-i ~/.ssh/deploy_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
ssh $SSHOPT "$SSH_USER@$SSH_HOST" "bash -s -- '$ACTION'" <<'REMOTE'
set -e
ACTION="$1"
DIR=/opt/zt-closet
IMAGE=git.lzcwy.cn/zhengchiliu/zt-closet-backend:migrate
cd "$DIR" || { echo "目录不存在: $DIR"; exit 1; }
[ -f configs/config.yaml ] || { echo "缺 configs/config.yaml"; exit 1; }
docker pull "$IMAGE"
docker run --rm \
--network host \
-v "$DIR/configs:/app/configs:ro" \
-v zt-go-build-cache:/root/.cache/go-build \
-e TZ=Asia/Shanghai \
"$IMAGE" "$ACTION"
REMOTE