91 lines
2.8 KiB
YAML
91 lines
2.8 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 \
|
|
--build-arg GOPROXY=https://goproxy.cn,direct \
|
|
-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
|