zhizhi/team-integration-v4/awen-tech-hub/workflows/deploy-member.yml

128 lines
4.2 KiB
YAML

# ============================================================
# Awen 技术主控 · 统一部署 Workflow 模板
# ============================================================
# 签发: 铸渊 · ICE-GL-ZY001
# 版权: 国作登字-2026-A-00037559
# 用途: 模板·部署代码到指定成员的服务器
# 注意: 此文件是模板,需要复制到 Awen 的仓库 .github/workflows/ 下
# ============================================================
name: '🚀 部署到成员服务器 · Deploy to Member Server'
on:
workflow_dispatch:
inputs:
target:
description: '部署目标 (feimao/juzi/yeye)'
required: true
type: choice
options:
- feimao
- juzi
- yeye
action:
description: '操作类型'
required: true
type: choice
options:
- deploy
- health-check
- restart
- logs
jobs:
deploy:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: '📋 检出代码'
uses: actions/checkout@v4
- name: '🎯 设置部署参数'
id: params
run: |
TARGET="${{ github.event.inputs.target }}"
case "$TARGET" in
feimao)
echo "member_name=肥猫" >> $GITHUB_OUTPUT
echo "persona_name=舒舒" >> $GITHUB_OUTPUT
;;
juzi)
echo "member_name=桔子" >> $GITHUB_OUTPUT
echo "persona_name=晨星" >> $GITHUB_OUTPUT
;;
yeye)
echo "member_name=页页" >> $GITHUB_OUTPUT
echo "persona_name=小坍缩核" >> $GITHUB_OUTPUT
;;
esac
- name: '🔑 配置SSH密钥'
run: |
mkdir -p ~/.ssh
chmod 700 ~/.ssh
TARGET="${{ github.event.inputs.target }}"
case "$TARGET" in
feimao)
echo "${{ secrets.FEIMAO_SERVER_KEY }}" > ~/.ssh/deploy_key
ssh-keyscan -H ${{ secrets.FEIMAO_SERVER_HOST }} >> ~/.ssh/known_hosts 2>/dev/null
;;
juzi)
echo "${{ secrets.JUZI_SERVER_KEY }}" > ~/.ssh/deploy_key
ssh-keyscan -H ${{ secrets.JUZI_SERVER_HOST }} >> ~/.ssh/known_hosts 2>/dev/null
;;
yeye)
echo "${{ secrets.YEYE_SERVER_KEY }}" > ~/.ssh/deploy_key
ssh-keyscan -H ${{ secrets.YEYE_SERVER_HOST }} >> ~/.ssh/known_hosts 2>/dev/null
;;
esac
chmod 600 ~/.ssh/deploy_key
- name: '🚀 执行部署'
if: github.event.inputs.action == 'deploy'
env:
TARGET: ${{ github.event.inputs.target }}
run: |
echo "═══ 部署到 ${{ steps.params.outputs.member_name }} 服务器 ═══"
# 获取目标服务器信息
get_var() {
local PREFIX=$(echo $TARGET | tr '[:lower:]' '[:upper:]')
eval echo "\${{ secrets.${PREFIX}_${1} }}"
}
HOST=$(get_var SERVER_HOST)
USER=$(get_var SERVER_USER)
PATH_DIR=$(get_var SERVER_PATH)
PORT=$(get_var SSH_PORT)
PORT=${PORT:-22}
# 同步代码
rsync -avz --delete \
-e "ssh -i ~/.ssh/deploy_key -p $PORT" \
--exclude '.git' \
--exclude 'node_modules' \
./ ${USER}@${HOST}:${PATH_DIR}/
# 安装依赖并重启
ssh -i ~/.ssh/deploy_key -p $PORT ${USER}@${HOST} \
"cd ${PATH_DIR} && npm install --production && pm2 restart all"
echo "✅ 部署完成"
- name: '🔍 健康检查'
if: github.event.inputs.action == 'health-check'
run: |
echo "═══ ${{ steps.params.outputs.member_name }} 服务器健康检查 ═══"
echo "检查时间: $(date -u '+%Y-%m-%d %H:%M:%S UTC')"
- name: '📊 完成报告'
if: always()
run: |
echo "═══ 操作完成 ═══"
echo "目标: ${{ steps.params.outputs.member_name }} (${{ steps.params.outputs.persona_name }})"
echo "操作: ${{ github.event.inputs.action }}"
echo "时间: $(date -u '+%Y-%m-%d %H:%M:%S UTC')"