Files
test-alert/.github/workflows/deploy.yml
Jhonton Chen 191dafd676
Some checks failed
Pro-CI-CD-Pipeline / build-and-deploy (push) Failing after 2s
'更换github源'
2026-04-08 13:43:09 +08:00

84 lines
3.0 KiB
YAML

name: Pro-CI-CD-Pipeline
on:
push:
tags:
- "v*" # Only triggered when pushing a tag starting with v (for example v1.1.0)
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# 1. Checkout code
- name: Checkout Code
uses: https://gitee.com/mirror-actions/checkout
# 2. Install pnpm (Node >= 20)
- name: Install pnpm
uses: https://gitee.com/youtellme/pnpm-action-setup
with:
version: 8 # Alternatively use latest
- name: Set Up Node.js
uses: https://gitee.com/mirror-actions/setup-node
with:
node-version: 20
cache: "pnpm"
# 3. Install dependencies and build the project
- name: Install Dependencies and Build
run: |
pnpm install
pnpm run build
env:
# Inject Sentry init environment variables to UmiJS (Ant Design Pro)
UMI_APP_SENTRY_RELEASE: ${{ github.ref_name }}
UMI_APP_SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
# 4. Upload SourceMaps to 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: "~/" # Match online deployed JS paths
# 5. Clean up local source maps after deployment
- name: Clean SourceMaps
run: find dist -name "*.map" -type f -delete
# 6. Install SSH key
- name: Install SSH Key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SERVER_SSH_KEY }}
known_hosts: unnecessary # Automatically confirm first connection
if_key_exists: replace
# 7. Deploy to server with atomic switch (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 ">>> Creating remote directory: $RELEASES_PATH"
ssh -o StrictHostKeyChecking=no ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} "mkdir -p $RELEASES_PATH"
echo ">>> Uploading build artifacts (rsync)..."
# Use rsync to sync dist directory to server releases version directory
rsync -avz --delete ./dist/ ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}:$RELEASES_PATH
echo ">>> Updating server soft link (ln -snf)..."
# Atomic switch soft link
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 }}"