From d51cb9d03d5dded1cae0475468d7278e1c5f5757 Mon Sep 17 00:00:00 2001 From: xiaoquan <838115837@qq.com> Date: Wed, 10 Jun 2026 17:21:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20CI/CD=20=E8=87=AA=E5=8A=A8=E5=85=8B?= =?UTF-8?q?=E9=9A=86=E5=92=8C=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 方案说明 - CI/CD 自动在 /tmp/rent-deploy 管理代码 - 首次运行自动克隆 - 后续运行自动 git pull 更新 - 不需要手动操作 ## 工作流程 1. 检查代码目录是否存在 2. 不存在 → git clone 3. 已存在 → git fetch + git reset --hard 4. 执行 docker-compose 部署 ## 优点 - 完全自动化 - 不依赖手动克隆 - 代码始终是最新的 Co-Authored-By: Claude Opus 4.7 --- .gitea/workflows/deploy.yml | 49 ++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 6f36418..917fd64 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -13,56 +13,61 @@ jobs: deploy: runs-on: [self-hosted, rent-deploy] steps: + - name: Clone or update code + run: | + WORK_DIR="/tmp/rent-deploy" + + if [ -d "$WORK_DIR" ]; then + echo "代码目录已存在,拉取最新代码..." + cd $WORK_DIR + git fetch --all + git reset --hard origin/${{ github.ref_name }} + else + echo "首次克隆代码..." + git clone ${{ gitea.server_url }}/${{ gitea.repository }}.git $WORK_DIR + cd $WORK_DIR + git checkout ${{ github.ref_name }} + fi + + echo "当前分支: $(git branch --show-current)" + echo "最新提交: $(git log -1 --oneline)" + - name: Deploy to test if: github.ref == 'refs/heads/test' run: | echo "部署到测试环境..." - echo "当前目录: $(pwd)" - echo "目录内容:" - ls -la - - # 确保在正确的目录 - if [ -d "deploy/docker" ]; then - cd deploy/docker - else - echo "错误: 找不到 deploy/docker 目录" - exit 1 - fi + cd /tmp/rent-deploy/deploy/docker export TEST_DB_PASSWORD="${{ secrets.TEST_DB_PASSWORD }}" export TEST_JWT_SECRET="${{ secrets.TEST_JWT_SECRET }}" export ENCRYPTION_KEY="${{ secrets.ENCRYPTION_KEY }}" + docker-compose -f docker-compose.test.yml down --remove-orphans docker-compose -f docker-compose.test.yml build --parallel docker-compose -f docker-compose.test.yml up -d docker image prune -f + echo "等待服务启动..." sleep 10 docker-compose -f docker-compose.test.yml ps + echo "✅ 测试环境部署完成" - name: Deploy to production if: github.ref == 'refs/heads/prod' run: | echo "部署到生产环境..." - echo "当前目录: $(pwd)" - echo "目录内容:" - ls -la - - # 确保在正确的目录 - if [ -d "deploy/docker" ]; then - cd deploy/docker - else - echo "错误: 找不到 deploy/docker 目录" - exit 1 - fi + cd /tmp/rent-deploy/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 + echo "✅ 生产环境部署完成"