fix: 简化 CI/CD 工作流,移除 git clone 步骤

## 问题
- git clone 在 Docker 容器内网络访问 Gitea 失败
- Runner 一直卡在 "Cloning into '.'" 步骤
- 代码已经在服务器上,不需要重复克隆

## 解决方案
- 移除所有 git clone 步骤
- 直接使用 Runner 工作目录中的代码(已由 Gitea 自动同步)
- 合并 install、build、deploy 为单个 job
- 根据分支条件执行不同的部署步骤

## 工作流程
1. 安装 Node.js 和 pnpm(如果没有)
2. 安装项目依赖
3. 构建所有应用
4. 根据分支部署:
   - test 分支 → 测试环境
   - prod 分支 → 生产环境

## 优点
- 简化流程,减少网络依赖
- 执行更快,不需要克隆代码
- 更稳定,避免网络超时问题

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-10 17:04:14 +08:00
parent 1b178eb69d
commit 733eb2419e
+19 -62
View File
@@ -10,42 +10,21 @@ env:
NODE_ENV: production NODE_ENV: production
jobs: jobs:
install: build-and-deploy:
runs-on: [self-hosted, rent-deploy] runs-on: [self-hosted, rent-deploy]
steps: steps:
- name: Checkout code
run: |
rm -rf $GITHUB_WORKSPACE/*
cd $GITHUB_WORKSPACE
git clone --depth 1 ${{ github.server_url }}/${{ github.repository }}.git .
git checkout ${{ github.sha }}
- name: Setup Node.js - name: Setup Node.js
run: | run: |
which node || (curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && apt-get install -y nodejs) which node || (curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && apt-get install -y nodejs)
which pnpm || npm install -g pnpm
- name: Install dependencies - name: Install dependencies
run: | run: |
npm install -g pnpm
pnpm config set store-dir .pnpm-store pnpm config set store-dir .pnpm-store
pnpm install --frozen-lockfile pnpm install --frozen-lockfile
build:
runs-on: [self-hosted, rent-deploy]
needs: install
steps:
- name: Checkout code
run: |
rm -rf $GITHUB_WORKSPACE/*
cd $GITHUB_WORKSPACE
git clone --depth 1 ${{ github.server_url }}/${{ github.repository }}.git .
git checkout ${{ github.sha }}
- name: Build shared packages - name: Build shared packages
run: | run: |
npm install -g pnpm
pnpm config set store-dir .pnpm-store
pnpm install --frozen-lockfile
pnpm --filter @rent/shared-types build pnpm --filter @rent/shared-types build
pnpm --filter @rent/shared-utils build pnpm --filter @rent/shared-utils build
@@ -61,46 +40,8 @@ jobs:
- name: Build website - name: Build website
run: pnpm --filter @rent/official-website build run: pnpm --filter @rent/official-website build
deploy-production:
runs-on: [self-hosted, rent-deploy]
needs: build
if: github.ref == 'refs/heads/prod'
steps:
- name: Checkout code
run: |
rm -rf $GITHUB_WORKSPACE/*
cd $GITHUB_WORKSPACE
git clone --depth 1 ${{ github.server_url }}/${{ github.repository }}.git .
git checkout ${{ github.sha }}
- name: Deploy to production
run: |
echo "部署到生产环境..."
cd deploy/docker
export PROD_DB_PASSWORD="${{ secrets.PROD_DB_PASSWORD }}"
export PROD_JWT_SECRET="${{ secrets.PROD_JWT_SECRET }}"
export ENCRYPTION_KEY="${{ secrets.ENCRYPTION_KEY }}"
docker-compose -f docker-compose.prod.yml down --remove-orphans
docker-compose -f docker-compose.prod.yml build --parallel
docker-compose -f docker-compose.prod.yml up -d
docker image prune -f
echo "等待服务启动..."
sleep 10
docker-compose -f docker-compose.prod.yml ps
deploy-test:
runs-on: [self-hosted, rent-deploy]
needs: build
if: github.ref == 'refs/heads/test'
steps:
- name: Checkout code
run: |
rm -rf $GITHUB_WORKSPACE/*
cd $GITHUB_WORKSPACE
git clone --depth 1 ${{ github.server_url }}/${{ github.repository }}.git .
git checkout ${{ github.sha }}
- name: Deploy to test - name: Deploy to test
if: github.ref == 'refs/heads/test'
run: | run: |
echo "部署到测试环境..." echo "部署到测试环境..."
cd deploy/docker cd deploy/docker
@@ -114,3 +55,19 @@ jobs:
echo "等待服务启动..." echo "等待服务启动..."
sleep 10 sleep 10
docker-compose -f docker-compose.test.yml ps docker-compose -f docker-compose.test.yml ps
- name: Deploy to production
if: github.ref == 'refs/heads/prod'
run: |
echo "部署到生产环境..."
cd deploy/docker
export PROD_DB_PASSWORD="${{ secrets.PROD_DB_PASSWORD }}"
export PROD_JWT_SECRET="${{ secrets.PROD_JWT_SECRET }}"
export ENCRYPTION_KEY="${{ secrets.ENCRYPTION_KEY }}"
docker-compose -f docker-compose.prod.yml down --remove-orphans
docker-compose -f docker-compose.prod.yml build --parallel
docker-compose -f docker-compose.prod.yml up -d
docker image prune -f
echo "等待服务启动..."
sleep 10
docker-compose -f docker-compose.prod.yml ps