SpringBoot 自动化部署实战:从环境搭建到 CI/CD 全流程

发布于:2025-06-16 ⋅ 阅读:(18) ⋅ 点赞:(0)

SpringBoot 自动化部署全流程实战

一、环境准备(开发侧)
  1. 基础工具链安装:
# JDK 17+
brew install openjdk@17
# Maven 构建工具
brew install maven
# Docker 环境
brew install --cask docker

  1. 项目配置验证:
<!-- pom.xml 关键配置 -->
<properties>
    <java.version>17</java.version>
    <docker.image.prefix>your-registry</docker.image.prefix>
</properties>

<build>
    <finalName>${project.artifactId}</finalName>
</build>

二、容器化配置
# 多阶段构建 Dockerfile
FROM maven:3.8.6-eclipse-temurin-17 AS build
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests

FROM eclipse-temurin:17-jre
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app/app.jar"]

三、CI/CD 流水线搭建

▨ 方案A:Jenkins 实现

// Jenkinsfile 核心配置
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        stage('Docker Build') {
            steps {
                script {
                    docker.build("${IMAGE_TAG}")
                }
            }
        }
        stage('Deploy') {
            when {
                branch 'main'
            }
            steps {
                sshagent(['prod-server']) {
                    sh "scp target/*.jar user@prod:/opt/app"
                }
            }
        }
    }
}

▨ 方案B:GitHub Actions

# .github/workflows/deploy.yml
name: CI/CD Pipeline
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Set up JDK 17
      uses: actions/setup-java@v3
      with:
        java-version: '17'
    - name: Build with Maven
      run: mvn -B package --file pom.xml
    - name: Docker Build
      run: docker build -t ${{ secrets.DOCKERHUB_USER }}/app:$GITHUB_SHA .
    - name: Deploy to Production
      if: github.ref == 'refs/heads/main'
      uses: appleboy/ssh-action@v0.1.10
      with:
        host: ${{ secrets.PROD_HOST }}
        username: ${{ secrets.SSH_USER }}
        key: ${{ secrets.SSH_KEY }}
        script: |
          docker-compose down && docker-compose up -d

四、部署验证与监控
  1. 健康检查端点:
@RestController
public class HealthController {
    @GetMapping("/health")
    public ResponseEntity<String> healthCheck() {
        return ResponseEntity.ok("STATUS:UP");
    }
}

  1. 日志监控方案:
# 查看容器日志
docker logs -f springboot-app

# 使用 Prometheus + Grafana 监控
# application.yml 配置
management:
  endpoints:
    web:
      exposure:
        include: health,metrics,prometheus
  metrics:
    export:
      prometheus:
        enabled: true

五、安全加固措施
  1. 密钥管理方案:
# 使用 Docker Secrets
echo "db_password" | docker secret create db_pass -

  1. 镜像扫描:
# 使用 Trivy 扫描漏洞
trivy image your-registry/app:latest

六、典型部署架构
开发环境 -> 代码提交 -> CI 流水线 -> 镜像仓库 -> 
Kubernetes 集群 -> 生产环境 -> 监控告警

最佳实践建议

  1. 使用蓝绿部署或金丝雀发布策略降低风险
  2. 每次构建生成唯一镜像标签(如 Git commit SHA)
  3. 在流水线中集成 SonarQube 代码质量检测
  4. 对生产环境部署进行审批流程控制

网站公告

今日签到

点亮在社区的每一天
去签到