密钥写死,处理报错
This commit is contained in:
306
.github/workflows/ci-cd.yml
vendored
Normal file
306
.github/workflows/ci-cd.yml
vendored
Normal file
@@ -0,0 +1,306 @@
|
||||
name: Flask 提示词大师 - CI/CD 流水线
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, develop ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
env:
|
||||
PYTHON_VERSION: '3.12'
|
||||
FLASK_ENV: testing
|
||||
|
||||
jobs:
|
||||
# 代码质量检查
|
||||
code-quality:
|
||||
name: 代码质量检查
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 设置Python环境
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
|
||||
- name: 安装依赖
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install flake8 black isort mypy
|
||||
pip install -r requirements.txt
|
||||
|
||||
- name: 代码格式检查
|
||||
run: |
|
||||
echo "检查代码格式..."
|
||||
black --check --diff .
|
||||
isort --check-only --diff .
|
||||
|
||||
- name: 代码质量检查
|
||||
run: |
|
||||
echo "运行Flake8检查..."
|
||||
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
|
||||
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
|
||||
|
||||
- name: 类型检查
|
||||
run: |
|
||||
echo "运行类型检查..."
|
||||
mypy src/ --ignore-missing-imports
|
||||
|
||||
# 单元测试
|
||||
test:
|
||||
name: 单元测试
|
||||
runs-on: ubuntu-latest
|
||||
needs: code-quality
|
||||
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: test123456
|
||||
MYSQL_DATABASE: test_db
|
||||
ports:
|
||||
- 3306:3306
|
||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
ports:
|
||||
- 6379:6379
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 设置Python环境
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
|
||||
- name: 安装依赖
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
pip install pytest pytest-cov pytest-mock
|
||||
|
||||
- name: 创建测试环境变量
|
||||
run: |
|
||||
echo "FLASK_ENV=testing" >> $GITHUB_ENV
|
||||
echo "DATABASE_URL=mysql+pymysql://root:test123456@localhost:3306/test_db?charset=utf8mb4" >> $GITHUB_ENV
|
||||
echo "SECRET_KEY=test-secret-key-for-ci" >> $GITHUB_ENV
|
||||
echo "LLM_API_KEY=test-api-key" >> $GITHUB_ENV
|
||||
|
||||
- name: 等待数据库就绪
|
||||
run: |
|
||||
echo "等待MySQL数据库启动..."
|
||||
sleep 30
|
||||
|
||||
- name: 运行单元测试
|
||||
run: |
|
||||
echo "运行单元测试..."
|
||||
pytest tests/ -v --cov=src --cov-report=xml --cov-report=html
|
||||
|
||||
- name: 上传测试覆盖率报告
|
||||
uses: codecov/codecov-action@v3
|
||||
with:
|
||||
file: ./coverage.xml
|
||||
flags: unittests
|
||||
name: codecov-umbrella
|
||||
|
||||
# 集成测试
|
||||
integration-test:
|
||||
name: 集成测试
|
||||
runs-on: ubuntu-latest
|
||||
needs: test
|
||||
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: test123456
|
||||
MYSQL_DATABASE: test_db
|
||||
ports:
|
||||
- 3306:3306
|
||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
ports:
|
||||
- 6379:6379
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 设置Python环境
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
|
||||
- name: 安装依赖
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
|
||||
- name: 创建测试环境变量
|
||||
run: |
|
||||
echo "FLASK_ENV=testing" >> $GITHUB_ENV
|
||||
echo "DATABASE_URL=mysql+pymysql://root:test123456@localhost:3306/test_db?charset=utf8mb4" >> $GITHUB_ENV
|
||||
echo "SECRET_KEY=test-secret-key-for-ci" >> $GITHUB_ENV
|
||||
echo "LLM_API_KEY=test-api-key" >> $GITHUB_ENV
|
||||
|
||||
- name: 等待数据库就绪
|
||||
run: |
|
||||
echo "等待MySQL数据库启动..."
|
||||
sleep 30
|
||||
|
||||
- name: 启动应用进行集成测试
|
||||
run: |
|
||||
echo "启动应用进行集成测试..."
|
||||
python run_dev.py &
|
||||
sleep 10
|
||||
|
||||
- name: 运行集成测试
|
||||
run: |
|
||||
echo "运行集成测试..."
|
||||
python -c "
|
||||
import requests
|
||||
import time
|
||||
|
||||
# 等待应用启动
|
||||
time.sleep(5)
|
||||
|
||||
# 测试健康检查
|
||||
response = requests.get('http://localhost:5000/health')
|
||||
assert response.status_code == 200
|
||||
print('健康检查通过')
|
||||
|
||||
# 测试主页
|
||||
response = requests.get('http://localhost:5000/')
|
||||
assert response.status_code == 200
|
||||
print('主页访问通过')
|
||||
|
||||
# 测试API端点
|
||||
response = requests.post('http://localhost:5000/api/wx/templates/intent',
|
||||
json={'text': '测试文本'})
|
||||
assert response.status_code == 200
|
||||
print('API测试通过')
|
||||
"
|
||||
|
||||
# 构建Docker镜像
|
||||
build:
|
||||
name: 构建Docker镜像
|
||||
runs-on: ubuntu-latest
|
||||
needs: [test, integration-test]
|
||||
if: github.ref == 'refs/heads/main'
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 设置Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: 登录Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: 构建并推送Docker镜像
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: |
|
||||
${{ secrets.DOCKER_USERNAME }}/flask-prompt-master:latest
|
||||
${{ secrets.DOCKER_USERNAME }}/flask-prompt-master:${{ github.sha }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
# 部署到测试环境
|
||||
deploy-test:
|
||||
name: 部署到测试环境
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: github.ref == 'refs/heads/develop'
|
||||
environment: test
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 部署到测试服务器
|
||||
run: |
|
||||
echo "部署到测试环境..."
|
||||
# 这里可以添加部署到测试服务器的脚本
|
||||
# 例如:使用SSH连接到测试服务器并更新应用
|
||||
|
||||
- name: 运行部署后测试
|
||||
run: |
|
||||
echo "运行部署后测试..."
|
||||
# 等待应用启动
|
||||
sleep 30
|
||||
|
||||
# 测试应用是否正常运行
|
||||
curl -f http://test-server:5000/health || exit 1
|
||||
|
||||
# 部署到生产环境
|
||||
deploy-production:
|
||||
name: 部署到生产环境
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: github.ref == 'refs/heads/main'
|
||||
environment: production
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 部署到生产服务器
|
||||
run: |
|
||||
echo "部署到生产环境..."
|
||||
# 这里可以添加部署到生产服务器的脚本
|
||||
# 例如:使用SSH连接到生产服务器并更新应用
|
||||
|
||||
- name: 运行部署后测试
|
||||
run: |
|
||||
echo "运行部署后测试..."
|
||||
# 等待应用启动
|
||||
sleep 30
|
||||
|
||||
# 测试应用是否正常运行
|
||||
curl -f https://production-server/health || exit 1
|
||||
|
||||
- name: 发送部署通知
|
||||
run: |
|
||||
echo "部署完成,发送通知..."
|
||||
# 这里可以添加发送通知的逻辑
|
||||
# 例如:发送邮件、Slack消息等
|
||||
|
||||
# 监控系统部署
|
||||
deploy-monitoring:
|
||||
name: 部署监控系统
|
||||
runs-on: ubuntu-latest
|
||||
needs: deploy-production
|
||||
if: github.ref == 'refs/heads/main'
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 部署监控系统
|
||||
run: |
|
||||
echo "部署监控系统..."
|
||||
# 部署监控脚本到服务器
|
||||
# 配置定时任务
|
||||
# 启动监控服务
|
||||
|
||||
- name: 验证监控系统
|
||||
run: |
|
||||
echo "验证监控系统..."
|
||||
# 检查监控系统是否正常运行
|
||||
# 测试监控脚本功能
|
||||
Reference in New Issue
Block a user