This commit is contained in:
haomingming 2026-06-16 10:47:42 +08:00
parent e0b089fbf8
commit b91077eda6
3 changed files with 145 additions and 0 deletions

96
Jenkinsfile vendored Normal file
View File

@ -0,0 +1,96 @@
pipeline {
// 可以在这里指定运行的节点any 表示任何可用的 Jenkins 节点
agent any
environment {
// 定义镜像名称和标签
DOCKER_REGISTRY = '' // 如果有私有仓库,填在这里,如 'registry.cn-hangzhou.aliyuncs.com/my-ns/'
FRONTEND_IMAGE_NAME = 'writeoff-frontend'
BACKEND_IMAGE_NAME = 'writeoff-backend'
IMAGE_TAG = "${env.BUILD_NUMBER}" // 或者用 git commit hash
// 部署的目标服务器目录
DEPLOY_DIR = '/opt/writeoff'
}
stages {
// ---------------------------------------------------------
// 后端构建阶段
// ---------------------------------------------------------
stage('Build Backend') {
when {
// 仅当 backend 目录下的文件或 Dockerfile 发生变化时执行
changeset "backend/**"
}
steps {
echo "=============================="
echo "🚀 检测到后端代码变更,开始构建后端镜像..."
echo "=============================="
dir('backend') {
// 使用 Docker 构建后端镜像
sh "docker build -t ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:${IMAGE_TAG} ."
sh "docker tag ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:${IMAGE_TAG} ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:latest"
// 如果有私有仓库,可以在这里 push
// sh "docker push ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:${IMAGE_TAG}"
// sh "docker push ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:latest"
}
}
}
// ---------------------------------------------------------
// 前端构建与部署阶段 (方案1: 直接打包并复制静态文件)
// ---------------------------------------------------------
stage('Build & Deploy Frontend') {
when {
// 仅当 frontend 目录下的文件发生变化时执行
changeset "frontend/**"
}
steps {
echo "=============================="
echo "🚀 检测到前端代码变更,开始构建前端..."
echo "=============================="
dir('frontend') {
// 使用 npm 安装依赖并构建
sh "npm install"
sh "npm run build"
// 将打包好的静态文件复制到目标服务器的 Nginx 目录
// TODO: 请将 root@your-server:/usr/share/nginx/html/ 替换为实际部署路径
echo "📦 部署前端静态文件(dist)到 Nginx 目录..."
sh "scp -r dist/* root@your-server:/usr/share/nginx/html/"
}
}
}
// ---------------------------------------------------------
// 部署阶段 (使用 Docker Compose)
// ---------------------------------------------------------
stage('Deploy') {
steps {
echo "=============================="
echo "📦 开始部署项目..."
echo "=============================="
// 这里假设您是在 Jenkins 本机运行 docker-compose或者通过 SSH 连到目标服务器执行
// 示例中我们直接通过 docker-compose up -d 更新服务
sh "docker-compose up -d"
// 清理悬空镜像(可选项,防止磁盘占用过大)
sh "docker image prune -f"
}
}
}
// ---------------------------------------------------------
// 构建后处理
// ---------------------------------------------------------
post {
success {
echo "✅ 构建和部署成功!"
}
failure {
echo "❌ 构建或部署失败,请检查 Jenkins 日志。"
}
}
}

33
backend/Dockerfile Normal file
View File

@ -0,0 +1,33 @@
# 阶段 1构建环境
FROM maven:3.8.6-openjdk-8-slim as builder
WORKDIR /app
# 先复制 pom.xml 以下载依赖,利用 Docker 缓存机制
COPY pom.xml .
RUN mvn dependency:go-offline -B
# 复制源代码并打包
COPY src ./src
RUN mvn clean package -DskipTests
# 阶段 2运行环境
# 根据 pom.xml项目使用的是 Java 1.8
FROM openjdk:8-jre-alpine
WORKDIR /app
# 设置时区为上海(可选,但推荐)
ENV TZ=Asia/Shanghai
RUN apk add --no-cache tzdata && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
echo $TZ > /etc/timezone
# 从构建阶段复制打包好的 jar 包
COPY --from=builder /app/target/*.jar app.jar
# 暴露 Spring Boot 默认端口
EXPOSE 8080
# 启动参数可根据需要调整
CMD ["java", "-jar", "app.jar"]

16
docker-compose.yml Normal file
View File

@ -0,0 +1,16 @@
version: '3.8'
services:
writeoff-backend:
image: writeoff-backend:latest
container_name: writeoff-backend
ports:
- "8080:8080"
restart: always
environment:
- SPRING_PROFILES_ACTIVE=prod
# 在这里配置数据库等环境变量
# - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/writeoff...
# 如果有同级的数据库容器,可以在这里关联
# depends_on:
# - db