kind: pipeline type: docker name: deploy-test # 测试环境:test 分支触发 trigger: branch: - test event: - push steps: - name: build-backend image: docker:dind volumes: - name: docker-sock path: /var/run/docker.sock commands: - cd backend - docker build -t kaopeilian-backend:${DRONE_COMMIT_SHA:0:8} -f Dockerfile . - docker tag kaopeilian-backend:${DRONE_COMMIT_SHA:0:8} kaopeilian-backend:test - name: build-frontend image: docker:dind volumes: - name: docker-sock path: /var/run/docker.sock commands: - cd frontend - docker build -t kaopeilian-frontend:${DRONE_COMMIT_SHA:0:8} -f Dockerfile --build-arg VITE_API_BASE_URL=http://kaopeilian.test.ai.ireborn.com.cn . - docker tag kaopeilian-frontend:${DRONE_COMMIT_SHA:0:8} kaopeilian-frontend:test - name: deploy-test image: docker:dind volumes: - name: docker-sock path: /var/run/docker.sock environment: DATABASE_URL: from_secret: database_url REDIS_HOST: from_secret: redis_host REDIS_PORT: from_secret: redis_port REDIS_PASSWORD: from_secret: redis_password commands: - docker network create kaopeilian-network 2>/dev/null || true - docker stop kaopeilian-backend-test kaopeilian-frontend-test 2>/dev/null || true - docker rm kaopeilian-backend-test kaopeilian-frontend-test 2>/dev/null || true - | docker run -d \ --name kaopeilian-backend-test \ --network kaopeilian-network \ -p 18000:8000 \ --restart unless-stopped \ -e DATABASE_URL=$DATABASE_URL \ -e REDIS_HOST=$REDIS_HOST \ -e REDIS_PORT=$REDIS_PORT \ -e REDIS_PASSWORD=$REDIS_PASSWORD \ kaopeilian-backend:test - | docker run -d \ --name kaopeilian-frontend-test \ --network kaopeilian-network \ -p 13001:80 \ --restart unless-stopped \ kaopeilian-frontend:test - docker ps | grep kaopeilian - echo "=== 测试环境部署完成: http://kaopeilian.test.ai.ireborn.com.cn ===" volumes: - name: docker-sock host: path: /var/run/docker.sock --- kind: pipeline type: docker name: deploy-prod # 生产环境:main 分支触发,批量更新所有租户 trigger: branch: - main event: - push steps: - name: sync-code-to-server image: appleboy/drone-ssh settings: host: 120.79.247.16 username: root password: from_secret: prod_ssh_password port: 22 command_timeout: 10m script: - echo "=== 同步代码到生产服务器 ===" - cd /root/aiedu - git fetch origin - git reset --hard origin/main - echo "代码同步完成" - name: build-frontend image: appleboy/drone-ssh settings: host: 120.79.247.16 username: root password: from_secret: prod_ssh_password port: 22 command_timeout: 10m script: - echo "=== 编译前端(所有租户共享)===" - cd /root/aiedu/kaopeilian-frontend - npm install --silent - npm run build - echo "前端编译完成,所有租户已更新" - name: rebuild-backends image: appleboy/drone-ssh settings: host: 120.79.247.16 username: root password: from_secret: prod_ssh_password port: 22 command_timeout: 15m script: - echo "=== 重建所有后端服务 ===" - cd /root/aiedu - docker-compose -f docker-compose.prod-multi.yml up -d --build --no-deps hua-backend yy-backend hl-backend xy-backend fw-backend ex-backend - sleep 10 - docker ps | grep backend - echo "=== 生产环境批量更新完成 ===" - echo "租户列表: hua, yy, hl, xy, fw, ex" volumes: - name: docker-sock host: path: /var/run/docker.sock --- kind: pipeline type: docker name: code-check trigger: event: - push - pull_request steps: - name: python-lint image: python:3.9-slim commands: - cd backend - pip install flake8 -q - flake8 app --count --select=E9,F63,F7,F82 --show-source --statistics || true - echo "Python lint completed" - name: frontend-check image: node:18-alpine commands: - cd frontend - echo "Frontend check completed"