SpringBoot 自动化部署全流程实战
一、环境准备(开发侧)
- 基础工具链安装:
# JDK 17+
brew install openjdk@17
# Maven 构建工具
brew install maven
# Docker 环境
brew install --cask docker
- 项目配置验证:
<!-- 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
四、部署验证与监控
- 健康检查端点:
@RestController
public class HealthController {
@GetMapping("/health")
public ResponseEntity<String> healthCheck() {
return ResponseEntity.ok("STATUS:UP");
}
}
- 日志监控方案:
# 查看容器日志
docker logs -f springboot-app
# 使用 Prometheus + Grafana 监控
# application.yml 配置
management:
endpoints:
web:
exposure:
include: health,metrics,prometheus
metrics:
export:
prometheus:
enabled: true
五、安全加固措施
- 密钥管理方案:
# 使用 Docker Secrets
echo "db_password" | docker secret create db_pass -
- 镜像扫描:
# 使用 Trivy 扫描漏洞
trivy image your-registry/app:latest
六、典型部署架构
开发环境 -> 代码提交 -> CI 流水线 -> 镜像仓库 ->
Kubernetes 集群 -> 生产环境 -> 监控告警
最佳实践建议
- 使用蓝绿部署或金丝雀发布策略降低风险
- 每次构建生成唯一镜像标签(如 Git commit SHA)
- 在流水线中集成 SonarQube 代码质量检测
- 对生产环境部署进行审批流程控制