jenkins
This commit is contained in:
parent
e0b089fbf8
commit
b91077eda6
96
Jenkinsfile
vendored
Normal file
96
Jenkinsfile
vendored
Normal 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
33
backend/Dockerfile
Normal 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
16
docker-compose.yml
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user