diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 249020c..19b377f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -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 }}" + # 脚本中用到的远程部署信息也可以在这里映射 + # 如果脚本里写死了就不需要,如果没写死建议映射