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 -DskipTestsFROM 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 anystages {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-lateststeps:- uses: actions/checkout@v3- name: Set up JDK 17uses: actions/setup-java@v3with:java-version: '17'- name: Build with Mavenrun: mvn -B package --file pom.xml- name: Docker Buildrun: docker build -t ${{ secrets.DOCKERHUB_USER }}/app:$GITHUB_SHA .- name: Deploy to Productionif: github.ref == 'refs/heads/main'uses: appleboy/ssh-action@v0.1.10with: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,prometheusmetrics: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 代碼質量檢測
- 對生產環境部署進行審批流程控制