从构建到上线:1Panel+Jenkins+Docker自动化部署Spring Boot和Vue项目的完整流水线设计

张开发
2026/4/13 14:03:07 15 分钟阅读

分享文章

从构建到上线:1Panel+Jenkins+Docker自动化部署Spring Boot和Vue项目的完整流水线设计
从构建到上线1PanelJenkinsDocker自动化部署Spring Boot和Vue项目的完整流水线设计在当今快节奏的软件开发环境中自动化部署已成为提升团队效率的关键。本文将带你深入探索如何利用1Panel、Jenkins和Docker构建一个完整的CI/CD流水线实现Spring Boot后端和Vue前端项目的自动化部署。这套方案不仅能显著减少人工操作带来的错误还能确保每次代码变更都能快速、可靠地交付到生产环境。1. 环境准备与工具配置1.1 1Panel基础环境搭建1Panel作为轻量级的服务器管理面板为我们提供了便捷的Docker和Jenkins管理界面。安装完成后我们需要进行以下基础配置# 检查1Panel服务状态 sudo systemctl status 1panel # 开放必要端口 sudo firewall-cmd --permanent --add-port80/tcp sudo firewall-cmd --permanent --add-port443/tcp sudo firewall-cmd --permanent --add-port8080/tcp sudo firewall-cmd --reload在1Panel中我们需要特别注意目录映射的设置。建议为不同项目创建独立的目录结构/opt/projects/ ├── backend/ # Spring Boot项目 ├── frontend/ # Vue项目 └── deploy/ # 部署脚本和配置文件1.2 Jenkins核心插件安装通过1Panel的应用商店安装Jenkins后我们需要配置以下关键插件插件名称作用配置要点Maven IntegrationMaven项目支持配置全局Maven路径NodeJS PluginNode.js环境管理指定Node版本Publish Over SSH远程部署支持配置SSH密钥Docker PipelineDocker集成配置Docker Hub凭证提示安装插件后务必重启Jenkins服务使配置生效。可以通过1Panel的容器管理界面轻松完成重启操作。2. 前后端项目构建配置2.1 Spring Boot项目Maven构建对于Spring Boot后端项目我们需要在Jenkins中创建Maven项目并配置构建步骤。以下是关键配置示例pipeline { agent any stages { stage(Checkout) { steps { git branch: main, url: gitgithub.com:your-repo/backend.git } } stage(Build) { steps { sh mvn clean package -DskipTests archiveArtifacts artifacts: target/*.jar, fingerprint: true } } } }构建后处理需要特别注意确保pom.xml中配置了正确的finalName检查Dockerfile与项目结构匹配验证构建产物是否包含所有依赖2.2 Vue项目Node构建优化前端Vue项目的构建需要特别关注性能优化和缓存策略。以下是推荐的Jenkinsfile配置stage(Build Frontend) { agent { docker { image node:16 args -v $HOME/.npm:/root/.npm } } steps { sh npm install npm run build tar -czf dist.tar.gz dist/ archiveArtifacts artifacts: dist.tar.gz } }关键优化点使用Docker容器保证构建环境一致性挂载npm缓存目录加速依赖安装压缩构建产物减少传输时间3. Docker镜像构建与发布3.1 多阶段构建最佳实践对于Spring Boot项目推荐使用多阶段Dockerfile# 构建阶段 FROM maven:3.8-openjdk-17 AS build WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn package -DskipTests # 运行阶段 FROM openjdk:17-jdk-slim WORKDIR /app COPY --frombuild /app/target/app.jar . EXPOSE 8080 ENTRYPOINT [java, -jar, app.jar]对于Vue项目Nginx是最佳选择FROM node:16 AS build WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build FROM nginx:alpine COPY --frombuild /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 803.2 镜像版本管理与发布在Jenkins流水线中添加镜像发布阶段stage(Docker Build Push) { steps { script { docker.withRegistry(https://registry.hub.docker.com, docker-hub-cred) { def backendImage docker.build(your-repo/backend:${env.BUILD_NUMBER}) backendImage.push() def frontendImage docker.build(your-repo/frontend:${env.BUILD_NUMBER}) frontendImage.push() } } } }4. 自动化部署策略4.1 生产环境部署架构推荐的生产环境部署架构如下----------------- | Load Balancer | ---------------- | ---------------------------------------------- | | ------------------- ------------------- | Backend Service 1 | | Backend Service 2 | | (Docker Container) | | (Docker Container) | -------------------- -------------------- -------------------- -------------------- | Frontend Service | | Database | | (Nginx Container) | | (External Service) | -------------------- --------------------4.2 部署脚本关键逻辑后端服务部署脚本应包含以下核心功能#!/bin/bash # 变量配置 CONTAINER_NAMEbackend IMAGE_NAMEyour-repo/backend:$1 PORT_MAPPING8080:8080 # 停止并移除旧容器 docker stop $CONTAINER_NAME || true docker rm $CONTAINER_NAME || true # 拉取最新镜像 docker pull $IMAGE_NAME # 启动新容器 docker run -d \ --name $CONTAINER_NAME \ -p $PORT_MAPPING \ --restart unless-stopped \ $IMAGE_NAME # 健康检查 curl -sSf http://localhost:8080/actuator/health || exit 1前端部署则需要考虑缓存策略和零停机更新#!/bin/bash # 准备新版本 unzip -q frontend-dist.zip -d /tmp/frontend-new rm -f frontend-dist.zip # 原子切换 mv /var/www/html /var/www/html.old mv /tmp/frontend-new /var/www/html rm -rf /var/www/html.old # 重载Nginx nginx -s reload5. 完整Pipeline集成与优化5.1 端到端Pipeline示例将前后端构建和部署整合到一个Jenkinsfile中pipeline { agent none stages { stage(Build Backend) { agent { docker { image maven:3.8-openjdk-17 args -v $HOME/.m2:/root/.m2 } } steps { checkout([$class: GitSCM, branches: [[name: */main]], extensions: [], userRemoteConfigs: [[url: gitgithub.com:your-repo/backend.git]]]) sh mvn clean package -DskipTests stash includes: target/*.jar, name: backend-artifact } } stage(Build Frontend) { agent { docker { image node:16 args -v $HOME/.npm:/root/.npm } } steps { checkout([$class: GitSCM, branches: [[name: */main]], extensions: [], userRemoteConfigs: [[url: gitgithub.com:your-repo/frontend.git]]]) sh npm install npm run build tar -czf dist.tar.gz dist/ stash includes: dist.tar.gz, name: frontend-artifact } } stage(Docker Build) { agent any steps { unstash backend-artifact script { docker.build(your-repo/backend:${env.BUILD_NUMBER}) } unstash frontend-artifact script { docker.build(your-repo/frontend:${env.BUILD_NUMBER}) } } } stage(Deploy to Production) { steps { sshPublisher( publishers: [ sshPublisherDesc( configName: production-server, transfers: [ sshTransfer( execCommand: /opt/deploy/deploy-backend.sh, execTimeout: 120000 ) ] ) ] ) } } } }5.2 监控与日志收集部署完成后我们需要确保系统可观测性应用监控配置Prometheus监控Spring Boot Actuator端点日志收集使用ELK或LokiGraylog收集容器日志告警设置关键指标异常时触发Jenkins构建或通知# docker-compose监控服务示例 version: 3 services: prometheus: image: prom/prometheus ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana ports: - 3000:3000 depends_on: - prometheus这套自动化部署流水线在实际项目中经过多次迭代优化能够处理大多数JavaVue项目的部署需求。根据具体项目特点可能还需要调整构建策略或部署脚本但核心架构和工具链组合已被证明是稳定可靠的解决方案。

更多文章