This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
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: "${CLONE_SSH#*:}"
|
||||
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
|
||||
|
||||
# 使用 rsync 同步文件
|
||||
# 修正: 将 -e 参数移到前面
|
||||
rsync -rltzv --delete --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r \
|
||||
-e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no" \
|
||||
"$H5_SOURCE_DIR/" \
|
||||
"root@${TARGET}:${WEB_ROOT}/"
|
||||
|
||||
echo "H5 部署完成"
|
||||
echo "${{ steps.detect.outputs.env }} 环境部署成功!"
|
||||
Reference in New Issue
Block a user