Files
consumer-front/.gitea/workflows/deploy.yaml
T
kk 6e4c831870
Uni-app H5 Deploy (Prod + Staging) / deploy (release) Successful in 31s
修改同步文件时的参数
2026-06-29 15:05:45 +08:00

138 lines
4.9 KiB
YAML

name: Uni-app H5 Deploy (Prod + Staging)
on:
release:
types: [published]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
###############################################
# 0. 检查发布类型和分支权限
###############################################
- name: Check Release Type and Branch Permission
id: detect
run: |
BRANCH="${{ github.event.release.target_commitish }}"
IS_PRERELEASE="${{ github.event.release.prerelease }}"
echo "当前分支: $BRANCH"
echo "是否为预发布: $IS_PRERELEASE"
echo "发布标签: ${{ github.event.release.tag_name }}"
# 如果勾选了"标记为预发布"
if [ "$IS_PRERELEASE" = "true" ]; then
echo "检测到预发布版本"
if [ "$BRANCH" != "develop" ]; then
echo "错误: 预发布只能从 develop 分支发布"
echo "当前分支: $BRANCH"
exit 1
fi
echo "env=staging" >> "$GITHUB_OUTPUT"
echo "target=${{ vars.STG_WEB_HOST }}" >> "$GITHUB_OUTPUT"
echo "部署环境: 预发布环境"
echo "目标服务器: ${{ vars.STG_WEB_HOST }}"
else
# 未勾选"标记为预发布",为正式发布
echo "检测到正式发布版本"
if [ "$BRANCH" != "main" ]; then
echo "错误: 正式发布只能从 main 分支发布"
echo "当前分支: $BRANCH"
exit 1
fi
echo "env=production" >> "$GITHUB_OUTPUT"
echo "target=${{ vars.PRD_WEB_HOST }}" >> "$GITHUB_OUTPUT"
echo "部署环境: 生产环境"
echo "目标服务器: ${{ vars.PRD_WEB_HOST }}"
fi
###############################################
# 1. 设置 SSH 密钥 & 主机信任
###############################################
- name: Setup SSH Key
run: |
# 1. 确保 .ssh 目录存在且权限正确
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 2. 将 Gitea 密钥里的私钥写入文件
echo "${{ secrets.PRD_SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
# 3. 生成并写入 SSH Config 配置文件
cat > ~/.ssh/config << EOF
Host git-host
HostName 101.200.86.98
User kk
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
IdentityFile ~/.ssh/id_ed25519
EOF
chmod 600 ~/.ssh/config
echo "SSH 配置完成"
###############################################
# 2. Checkout 代码
###############################################
- name: Checkout Code via SSH
env:
CLONE_SSH: ${{ vars.CLONE_SSH }}
TAG_NAME: ${{ github.event.release.tag_name }}
# 直接使用服务器上的 Gitea 仓库物理路径
LOCAL_REPO_PATH: /usr/local/bin/data/gitea-repositories/kellan/consumer-front.git
run: |
set -e
# 使用 --no-hardlinks 在本机通过本地路径克隆,完全避开 SSH 和所有权检查
git clone --depth=1 --branch "$TAG_NAME" --no-hardlinks "$LOCAL_REPO_PATH" .
###############################################
# 3. 安装依赖 & 构建 Uni-app (H5)
###############################################
- name: Install dependencies and Build H5
run: |
set -e
# pnpm真实路径
PNPM_PATH="/root/.nvm/versions/node/v20.20.2/bin/pnpm"
# 1. 配置镜像并安装依赖
$PNPM_PATH config set registry https://registry.npmmirror.com
$PNPM_PATH install --frozen-lockfile
# 2. 执行构建
$PNPM_PATH run build:h5
###############################################
# 4. 上传 dist 到目标服务器
###############################################
- name: Upload dist to server
run: |
TARGET="${{ steps.detect.outputs.target }}"
# 请根据你的实际构建输出路径调整
H5_SOURCE_DIR="dist/build/h5"
WEB_ROOT="${{ vars.PROJECT_DIR }}"
echo "部署到: $TARGET"
echo "源目录: $H5_SOURCE_DIR"
echo "目标目录: $WEB_ROOT"
# 检查构建目录是否存在
if [ ! -d "$H5_SOURCE_DIR" ]; then
echo "错误: 构建目录 $H5_SOURCE_DIR 不存在,请检查构建命令是否正确"
exit 1
fi
# 确保构建产物可读
chmod -R a+r "$H5_SOURCE_DIR"
# 使用 rsync 同步文件
rsync -rltvz --delete \
--no-perms --no-times --no-owner --no-group \
-e "ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no" \
"$H5_SOURCE_DIR/" \
"root@${TARGET}:${WEB_ROOT}/"
echo "H5 部署完成"
echo "${{ steps.detect.outputs.env }} 环境部署成功!"