feat: 新增灵活部署配置
All checks were successful
continuous-integration/drone/push Build is passing

- 新增 dev2 分支部署开发2环境 (aiedu.ireborn.com.cn)
- 生产部署支持选择性更新租户 [all]/[hua]/[cxw,yy]
- 新增测试环境配置文档
This commit is contained in:
yuliang_guo
2026-01-28 10:39:55 +08:00
parent 0e5e6481ef
commit e406110af2
2 changed files with 453 additions and 138 deletions

View File

@@ -1,138 +1,236 @@
kind: pipeline
type: docker
name: deploy-test
# 测试环境test 分支触发,部署到生产服务器的开发环境
trigger:
branch:
- test
event:
- push
steps:
- name: sync-code
image: appleboy/drone-ssh
settings:
host: 120.79.247.16
username: root
password:
from_secret: prod_ssh_password
port: 22
command_timeout: 5m
script:
- echo "=== 同步代码到测试环境 ==="
- cd /root/aiedu
- git fetch origin
- git checkout test 2>/dev/null || git checkout -b test origin/test
- git reset --hard origin/test
- echo "代码同步完成"
- name: rebuild-dev
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
- docker-compose -f docker-compose.dev.yml up -d --build
- sleep 5
- docker ps | grep kpl-
- echo "=== 测试环境部署完成: https://kpl.ireborn.com.cn ==="
---
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 cxw-backend
- sleep 10
- docker ps | grep backend
- echo "=== 生产环境批量更新完成 ==="
- echo "租户列表: hua, yy, hl, xy, fw, ex, cxw"
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"
kind: pipeline
type: docker
name: deploy-dev1
# 开发环境1test 分支触发,部署到 kpl-dev
trigger:
branch:
- test
event:
- push
steps:
- name: sync-code
image: appleboy/drone-ssh
settings:
host: 120.79.247.16
username: root
password:
from_secret: prod_ssh_password
port: 22
command_timeout: 5m
script:
- echo "=== [开发1] 同步代码到 kpl-dev ==="
- cd /root/aiedu
- git fetch origin
- git checkout test 2>/dev/null || git checkout -b test origin/test
- git reset --hard origin/test
- echo "代码同步完成"
- name: rebuild-dev1
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 "=== [开发1] 重建 kpl-dev 环境 ==="
- cd /root/aiedu
- docker-compose -f docker-compose.dev.yml up -d --build
- sleep 5
- docker ps | grep kpl-
- echo "=== [开发1] 部署完成: https://kpl.ireborn.com.cn ==="
---
kind: pipeline
type: docker
name: deploy-dev2
# 开发环境2dev2 分支触发,部署到 kaopeilian 主站
trigger:
branch:
- dev2
event:
- push
steps:
- name: sync-code
image: appleboy/drone-ssh
settings:
host: 120.79.247.16
username: root
password:
from_secret: prod_ssh_password
port: 22
command_timeout: 5m
script:
- echo "=== [开发2] 同步代码到 kaopeilian 主站 ==="
- cd /root/aiedu
- git fetch origin
- git checkout dev2 2>/dev/null || git checkout -b dev2 origin/dev2
- git reset --hard origin/dev2
- 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 "=== [开发2] 编译前端 ==="
- cd /root/aiedu/kaopeilian-frontend
- npm install --silent
- npm run build
- echo "前端编译完成"
- name: rebuild-backend
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 "=== [开发2] 重建 kaopeilian 后端 ==="
- cd /root/aiedu
- docker restart kaopeilian-backend
- sleep 5
- docker ps | grep kaopeilian-backend
- echo "=== [开发2] 部署完成: https://aiedu.ireborn.com.cn ==="
---
kind: pipeline
type: docker
name: deploy-prod
# 生产环境main 分支触发,支持选择性部署租户
#
# 使用方法:
# git commit -m "feat: xxx [all]" - 部署所有租户
# git commit -m "feat: xxx [hua]" - 仅部署 hua
# git commit -m "feat: xxx [cxw,yy,hl]" - 部署指定多个租户
# git commit -m "feat: xxx" - 默认部署所有租户
#
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: deploy-tenants
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
- |
# 获取 commit message
COMMIT_MSG="${DRONE_COMMIT_MESSAGE}"
echo "Commit: $COMMIT_MSG"
# 所有可用租户
ALL_TENANTS="hua yy hl xy fw ex cxw"
# 解析要部署的租户
if echo "$COMMIT_MSG" | grep -q '\[all\]'; then
TENANTS="$ALL_TENANTS"
echo "部署所有租户: $TENANTS"
elif echo "$COMMIT_MSG" | grep -oP '\[\K[a-z,]+(?=\])' > /tmp/tenants.txt 2>/dev/null; then
TENANTS=$(cat /tmp/tenants.txt | tr ',' ' ')
echo "部署指定租户: $TENANTS"
else
TENANTS="$ALL_TENANTS"
echo "默认部署所有租户: $TENANTS"
fi
# 构建 docker-compose 命令
BACKEND_SERVICES=""
for t in $TENANTS; do
BACKEND_SERVICES="$BACKEND_SERVICES ${t}-backend"
done
echo "重建后端服务: $BACKEND_SERVICES"
docker-compose -f docker-compose.prod-multi.yml up -d --build --no-deps $BACKEND_SERVICES
sleep 10
docker ps | grep backend
echo "=== [生产] 部署完成 ==="
echo "已更新租户: $TENANTS"
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"