'更新actions流程'
This commit is contained in:
94
.github/workflows/deploy.yml
vendored
94
.github/workflows/deploy.yml
vendored
@@ -1,95 +1,33 @@
|
||||
# 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
|
||||
name: Local-Windows-CI-CD
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*" # 仅当推送 v 开头的 tag 时触发 (例如 v1.1.0)
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: ubuntu-latest
|
||||
deploy-job:
|
||||
# 匹配刚才在 config.yaml 里设置的标签
|
||||
runs-on: windows
|
||||
|
||||
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
|
||||
fetch-depth: 0 # 获取完整历史以便读取 tag
|
||||
|
||||
- name: Set Up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: "pnpm"
|
||||
|
||||
# 3. 安装依赖并执行打包
|
||||
- name: Install Dependencies and Build
|
||||
# 1. 注入 Secrets 到环境变量 (Gitea 会自动注入)
|
||||
# 这里直接调用你写的 node 脚本
|
||||
- name: Run Node Deploy Script
|
||||
shell: cmd # 指定使用 Windows 命令行
|
||||
run: |
|
||||
pnpm install
|
||||
pnpm run build
|
||||
node scripts/deploy.js
|
||||
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 }}
|
||||
# 将 Gitea 的 Secrets 映射给脚本使用的环境变量
|
||||
SENTRY_URL: ${{ secrets.GLITCHTIP_URL }}
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.GLITCHTIP_TOKEN }}
|
||||
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 }}"
|
||||
# 脚本中用到的远程部署信息也可以在这里映射
|
||||
# 如果脚本里写死了就不需要,如果没写死建议映射
|
||||
|
||||
Reference in New Issue
Block a user