oauth_nest_demo/.gitea/workflows/deploy.yml

108 lines
2.4 KiB
YAML

name: Backend CI/CD
on:
push:
branches:
- main
- master
pull_request:
branches:
- main
- master
jobs:
# 构建和测试
build:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v3
- name: 设置 Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: 安装 pnpm
run: npm install -g pnpm
- name: 安装依赖
run: pnpm install --frozen-lockfile
- name: 代码检查
run: |
echo "运行代码检查..."
# pnpm run lint
- name: 运行测试
run: |
echo "运行单元测试..."
# pnpm run test
- name: 构建项目
run: pnpm run build
- name: 上传构建产物
uses: actions/upload-artifact@v3
with:
name: dist
path: dist/
retention-days: 1
# 部署到生产环境
deploy:
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master'
steps:
- name: 检出代码
uses: actions/checkout@v3
- name: 下载构建产物
uses: actions/download-artifact@v3
with:
name: dist
path: dist/
- name: 部署到服务器
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SERVER_PORT || 22 }}
script: |
cd /path/to/self_proj
# 备份数据库
bash deploy.sh backup
# 拉取最新代码
cd oauth_nest_demo
git pull
cd ..
# 重新构建并启动后端
docker-compose up -d --build backend
# 等待服务启动
sleep 15
# 检查服务状态
docker-compose ps
- name: 健康检查
run: |
echo "等待服务启动..."
sleep 10
curl -f http://${{ secrets.SERVER_HOST }}:3000/api || exit 1
- name: 通知部署结果
if: always()
run: |
if [ ${{ job.status }} == 'success' ]; then
echo "✅ 后端部署成功!"
else
echo "❌ 后端部署失败!"
fi