🚀 add cicd

This commit is contained in:
eust-w 2025-04-14 14:23:02 +08:00
parent 6b65fc2f67
commit 385c6a3d07
6 changed files with 242 additions and 1 deletions

68
.drone.yml Normal file
View File

@ -0,0 +1,68 @@
# Drone CI/CD 配置文件
kind: pipeline
type: docker # 使用 Docker 作为执行环境
name: imgsearcher-pipeline
steps:
# 步骤1: 构建 Python 应用
- name: build_imgsearcher
image: ccr-29eug8s3-vpc.cnc.bj.baidubce.com/service/python:3.9-slim
commands:
- pip install poetry
- poetry config virtualenvs.create false
- poetry install --no-dev
- mkdir -p build/imgsearcher
- cp -r app.py app pyproject.toml poetry.lock Dockerfile build/imgsearcher/
when:
branch:
- dev
# 步骤2: 构建 imgsearcher 服务的 Docker 镜像
- name: image_imgsearcher
image: ccr-29eug8s3-vpc.cnc.bj.baidubce.com/service/kaniko:latest
settings:
registry: ccr-29eug8s3-vpc.cnc.bj.baidubce.com
repo: ccr-29eug8s3-vpc.cnc.bj.baidubce.com/service/imgsearcher
username:
from_secret: registry_username
password:
from_secret: registry_password
tags:
- latest
- ${DRONE_COMMIT_SHA}
dockerfile: Dockerfile
build_args:
- HTTP_PROXY=${HTTP_PROXY}
- HTTPS_PROXY=${HTTPS_PROXY}
- NO_PROXY=${NO_PROXY}
when:
branch:
- dev
# 步骤3: 部署 imgsearcher 到开发环境
- name: deploy-imgsearcher-dev
image: ccr-29eug8s3-vpc.cnc.bj.baidubce.com/service/drone-kubernetes
settings:
kubernetes_server:
from_secret: kubernetes_server_dev
kubernetes_token:
from_secret: kubernetes_token_dev
kubernetes_cert:
from_secret: kubernetes_cert_dev
namespace:
from_secret: kubernetes_namespace_dev
deployment: imgsearcher
container: imgsearcher
repo: ccr-29eug8s3-vpc.cnc.bj.baidubce.com/service/imgsearcher
tag: ${DRONE_COMMIT_SHA}
when:
branch:
- dev
trigger:
branch:
- dev
event:
- push
- tag

2
.env
View File

@ -10,4 +10,4 @@ AZURE_OPENAI_DEPLOYMENT_NAME=gpt-4o-drobotics
# MongoDB配置
MONGO_URI=mongodb://localhost:27017/
MONGO_DB_NAME=imgsearcherxx
MONGO_DB_NAME=imgsearcher

31
.gitignore vendored Normal file
View File

@ -0,0 +1,31 @@
# Python缓存文件
__pycache__/
*.py[cod]
*$py.class
# 虚拟环境
venv/
env/
ENV/
# 上传的文件
uploads/
# 日志文件
*.log
# 本地配置
.env.local
.env.development.local
.env.test.local
.env.production.local
# IDE文件
.idea/
.vscode/
*.swp
*.swo
# 系统文件
.DS_Store
Thumbs.db

27
Dockerfile Normal file
View File

@ -0,0 +1,27 @@
FROM python:3.9-slim
WORKDIR /app
# 安装Poetry
RUN pip install --no-cache-dir poetry
# 配置Poetry不创建虚拟环境
RUN poetry config virtualenvs.create false
# 复制Poetry配置文件
COPY pyproject.toml poetry.lock* ./
# 安装依赖
RUN poetry install --no-dev --no-interaction --no-ansi
# 复制应用程序代码
COPY . .
# 创建上传目录
RUN mkdir -p uploads
# 暴露应用端口
EXPOSE 5001
# 运行应用
CMD ["python", "app.py"]

113
k8s-deployment.yaml Normal file
View File

@ -0,0 +1,113 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: imgsearcher
namespace: imgsearcher
labels:
app: imgsearcher
spec:
replicas: 2
selector:
matchLabels:
app: imgsearcher
template:
metadata:
labels:
app: imgsearcher
spec:
containers:
- name: imgsearcher
image: ${DRONE_REPO_OWNER}/imgsearcher:${DRONE_COMMIT_SHA:0:8}
ports:
- containerPort: 5001
env:
- name: MONGO_URI
valueFrom:
secretKeyRef:
name: imgsearcher-secrets
key: mongo-uri
- name: BAIDU_API_KEY
valueFrom:
secretKeyRef:
name: imgsearcher-secrets
key: baidu-api-key
- name: BAIDU_SECRET_KEY
valueFrom:
secretKeyRef:
name: imgsearcher-secrets
key: baidu-secret-key
- name: AZURE_API_KEY
valueFrom:
secretKeyRef:
name: imgsearcher-secrets
key: azure-api-key
- name: AZURE_API_ENDPOINT
valueFrom:
secretKeyRef:
name: imgsearcher-secrets
key: azure-api-endpoint
resources:
limits:
cpu: "500m"
memory: "512Mi"
requests:
cpu: "200m"
memory: "256Mi"
volumeMounts:
- name: uploads
mountPath: /app/uploads
volumes:
- name: uploads
persistentVolumeClaim:
claimName: imgsearcher-uploads-pvc
---
apiVersion: v1
kind: Service
metadata:
name: imgsearcher
namespace: imgsearcher
spec:
selector:
app: imgsearcher
ports:
- port: 80
targetPort: 5001
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: imgsearcher
namespace: imgsearcher
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
rules:
- host: imgsearcher.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: imgsearcher
port:
number: 80
tls:
- hosts:
- imgsearcher.example.com
secretName: imgsearcher-tls
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: imgsearcher-uploads-pvc
namespace: imgsearcher
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: standard

2
poetry.toml Normal file
View File

@ -0,0 +1,2 @@
[virtualenvs]
create = false