Files
test-alert/.github/workflows/deploy.yml
2026-04-07 20:16:40 +08:00

96 lines
3.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 1. 准备工作:配置 GitHub Secrets
# 在你的 GitHub 仓库中,进入 Settings -> Secrets and variables -> Actions添加以下 Repository secrets
# SERVER_HOST: 你的服务器 IP。
# SERVER_USER: 服务器用户名(如 root
# SERVER_SSH_KEY: 你的 SSH 私钥id_rsa 的内容)。
# GLITCHTIP_URL: 你的 GlitchTip 域名(如 https://glitchtip.example.com/)。
# GLITCHTIP_ORG: GlitchTip 里的组织 Slug。
# GLITCHTIP_PROJECT: GlitchTip 里的项目 Slug。
# GLITCHTIP_TOKEN: GlitchTip 的 API Auth Token。
# REMOTE_PATH: 服务器部署根路径(如 /www/wwwroot/alert
# 2. 配置 GitHub Actions
# 在你的 GitHub 仓库中,进入 Actions -> Workflows创建一个新的 Workflow 文件,例如 deploy.yml。
name: Pro-CI-CD-Pipeline
on:
push:
tags:
- "v*" # 仅当推送 v 开头的 tag 时触发 (例如 v1.1.0)
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# 1. 检出代码
- name: Checkout Code
uses: actions/checkout@v4
# 2. 安装 pnpm (Node >= 20)
- name: Install pnpm
uses: pnpm/action-setup@v2
with:
version: 8 # 或者使用 latest
- name: Set Up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"
# 3. 安装依赖并执行打包
- name: Install Dependencies and Build
run: |
pnpm install
pnpm run build
env:
# 注入版本号给 UmiJS (Ant Design Pro)
UMI_APP_SENTRY_RELEASE: ${{ github.ref_name }}
# 4. 上传 SourceMap 到 GlitchTip
- name: Upload SourceMaps to GlitchTip
uses: getsentry/action-release@v1
env:
SENTRY_AUTH_TOKEN: ${{ secrets.GLITCHTIP_TOKEN }}
SENTRY_URL: ${{ secrets.GLITCHTIP_URL }}
SENTRY_ORG: ${{ secrets.GLITCHTIP_ORG }}
SENTRY_PROJECT: ${{ secrets.GLITCHTIP_PROJECT }}
with:
version: ${{ github.ref_name }}
sourcemaps: "./dist"
url_prefix: "~/" # 匹配线上 JS 路径
# 5. 安全清理:删除本地打包后的 .map 文件
- name: Clean SourceMaps
run: find dist -name "*.map" -type f -delete
# 6. 配置 SSH 密钥
- name: Install SSH Key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SERVER_SSH_KEY }}
known_hosts: unnecessary # 第一次连接自动确认
if_key_exists: replace
# 7. 远程原子化部署 (Atomic Deployment)
- name: Deploy to Server
run: |
VERSION=${{ github.ref_name }}
REMOTE_BASE=${{ secrets.REMOTE_PATH }}
RELEASES_PATH="$REMOTE_BASE/releases/$VERSION"
CURRENT_PATH="$REMOTE_BASE/current"
echo ">>> 正在创建远程目录: $RELEASES_PATH"
ssh -o StrictHostKeyChecking=no ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} "mkdir -p $RELEASES_PATH"
echo ">>> 正在上传打包产物 (rsync)..."
# 使用 rsync 同传 dist 目录内容到 releases 下的版本目录
rsync -avz --delete ./dist/ ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}:$RELEASES_PATH
echo ">>> 正在更新服务器软链接 (ln -snf)..."
# 原子化切换软链接
ssh ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} "ln -snf $RELEASES_PATH $CURRENT_PATH"
- name: Success Notification
run: echo "🎉 Version ${{ github.ref_name }} successfully deployed to ${{ secrets.SERVER_HOST }}"