Jenkins+K8s自动化部署Spring Boot全攻略

基于 Jenkins 的 CI/CD 流水线实现 Spring Boot 应用自动化部署到 Kubernetes

环境准备与工具配置

确保已安装 Jenkins、Docker、Kubernetes 集群(如 Minikube 或生产环境集群)及 kubectl 命令行工具。Jenkins 需安装 Kubernetes 插件(如 Kubernetes CLI Plugin)和 Docker 相关插件(如 Docker Pipeline)。

在 Jenkins 系统配置中,添加 Kubernetes 集群的凭据(kubeconfig 文件或 Service Account 令牌)。配置 Docker Hub 或私有镜像仓库的访问凭证。

Spring Boot 项目配置

在项目根目录创建 Dockerfile,内容示例如下:

FROM openjdk:17-jdk-slim
COPY target/your-app.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

创建 Kubernetes 部署文件(deployment.yaml):

apiVersion: apps/v1
kind: Deployment: springboot-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: springboot-app
  template:
           app: springboot-app
    spec:
      containers:
      - name: app
        image: your-dockerhub/springboot-app:${TAG}
        ports:
        - containerPort: 8080

Jenkins 流水线脚本

在 Jenkinsfile 中定义 CI/CD 流程:

pipeline {
  agent any
  environment {
    DOCKER_IMAGE = 'your-dockerhub/springboot-app'
    KUBE_CONFIG = credentials('k8s-credentials')
  }
  stages {
    stage('Build') {
      steps {
        sh 'mvn clean package'
      }
    }
    stage('Docker Build & Push') {
      steps {
        script {
          docker.build("${DOCKER_IMAGE}:${env.BUILD_ID}").push()
        }
      }
    }
    stage('Deploy to Kubernetes') {
      steps {
        sh "sed -i 's#\\\${TAG}#${env.BUILD_ID}#g' deployment.yaml"
        sh "kubectl apply -f deployment.yaml"
      }
    }
  }
}

流水线优化与扩展

添加测试阶段:在 Build 阶段后插入单元测试和集成测试阶段,使用 sh 'mvn test' 命令执行测试。

实现蓝绿部署:修改 deployment.yaml 为两个 Deployment(blue 和 green),通过 Jenkins 脚本控制流量切换。示例片段:

sh "kubectl apply -f green-deployment.yaml"
sh "kubectl patch svc/springboot-svc -p '{\"spec\":{\"selector\":{\"app\":\"springboot-green\"}}}'"

配置自动回滚:使用 Kubernetes 的 Rollback 功能,在 Jenkins 中检测部署状态,失败时执行:

sh "kubectl rollout undo deployment/springboot-app"

监控与日志集成

在 Kubernetes 部署中添加 Prometheus 监控注解:

annotations:
  prometheus.io/scrape: "true"
  prometheus.io/port: "8080"

配置 Jenkins 流水线发送部署通知到 Slack 或邮件:

post {
  success {
    slackSend channel: '#deployments', message: "Deployment succeeded: ${env.BUILD_URL}"
  }
  failure {
    mail to: 'team@example.com', subject: 'Deployment Failed', body: "Check ${env.BUILD_URL}"
  }
}

安全加固措施

使用 Kubernetes Secrets 管理敏感信息:

kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password=1234

在 deployment.yaml 中引用 Secret:

env:
- name: DB_USERNAME
  valueFrom:
    secretKeyRef:
      name: db-secret
      key: username

通过 Jenkins 的 Credentials Binding 插件注入敏感数据,避免明文出现在流水线脚本中。

BbS.okapop072.sbs/PoSt/1122_843401.HtM
BbS.okapop073.sbs/PoSt/1122_148623.HtM
BbS.okapop074.sbs/PoSt/1122_606921.HtM
BbS.okapop075.sbs/PoSt/1122_586207.HtM
BbS.okapop076.sbs/PoSt/1122_463049.HtM
BbS.okapop077.sbs/PoSt/1122_078806.HtM
BbS.okapop078.sbs/PoSt/1122_096398.HtM
BbS.okapop079.sbs/PoSt/1122_221721.HtM
BbS.okapop080.sbs/PoSt/1122_102975.HtM
BbS.okapop081.sbs/PoSt/1122_938868.HtM
BbS.okapop072.sbs/PoSt/1122_911553.HtM
BbS.okapop073.sbs/PoSt/1122_348396.HtM
BbS.okapop074.sbs/PoSt/1122_534844.HtM
BbS.okapop075.sbs/PoSt/1122_460017.HtM
BbS.okapop076.sbs/PoSt/1122_272621.HtM
BbS.okapop077.sbs/PoSt/1122_436605.HtM
BbS.okapop078.sbs/PoSt/1122_107680.HtM
BbS.okapop079.sbs/PoSt/1122_492143.HtM
BbS.okapop080.sbs/PoSt/1122_312467.HtM
BbS.okapop081.sbs/PoSt/1122_448528.HtM
BbS.okapop072.sbs/PoSt/1122_261350.HtM
BbS.okapop073.sbs/PoSt/1122_554285.HtM
BbS.okapop074.sbs/PoSt/1122_464884.HtM
BbS.okapop075.sbs/PoSt/1122_438903.HtM
BbS.okapop076.sbs/PoSt/1122_807590.HtM
BbS.okapop077.sbs/PoSt/1122_617226.HtM
BbS.okapop078.sbs/PoSt/1122_077744.HtM
BbS.okapop079.sbs/PoSt/1122_731405.HtM
BbS.okapop080.sbs/PoSt/1122_630456.HtM
BbS.okapop081.sbs/PoSt/1122_751525.HtM
BbS.okapop072.sbs/PoSt/1122_920478.HtM
BbS.okapop073.sbs/PoSt/1122_444790.HtM
BbS.okapop074.sbs/PoSt/1122_687929.HtM
BbS.okapop075.sbs/PoSt/1122_819027.HtM
BbS.okapop076.sbs/PoSt/1122_192327.HtM
BbS.okapop077.sbs/PoSt/1122_802007.HtM
BbS.okapop078.sbs/PoSt/1122_295917.HtM
BbS.okapop079.sbs/PoSt/1122_797762.HtM
BbS.okapop080.sbs/PoSt/1122_645794.HtM
BbS.okapop081.sbs/PoSt/1122_617479.HtM
BbS.okapop072.sbs/PoSt/1122_299038.HtM
BbS.okapop073.sbs/PoSt/1122_951514.HtM
BbS.okapop074.sbs/PoSt/1122_330851.HtM
BbS.okapop075.sbs/PoSt/1122_980447.HtM
BbS.okapop076.sbs/PoSt/1122_847009.HtM
BbS.okapop077.sbs/PoSt/1122_106959.HtM
BbS.okapop078.sbs/PoSt/1122_704506.HtM
BbS.okapop079.sbs/PoSt/1122_755734.HtM
BbS.okapop080.sbs/PoSt/1122_029596.HtM
BbS.okapop081.sbs/PoSt/1122_784563.HtM
BbS.okapop072.sbs/PoSt/1122_187332.HtM
BbS.okapop073.sbs/PoSt/1122_675377.HtM
BbS.okapop074.sbs/PoSt/1122_330010.HtM
BbS.okapop075.sbs/PoSt/1122_851702.HtM
BbS.okapop076.sbs/PoSt/1122_014458.HtM
BbS.okapop077.sbs/PoSt/1122_629116.HtM
BbS.okapop078.sbs/PoSt/1122_343228.HtM
BbS.okapop079.sbs/PoSt/1122_157615.HtM
BbS.okapop080.sbs/PoSt/1122_601941.HtM
BbS.okapop081.sbs/PoSt/1122_126127.HtM
BbS.okapop072.sbs/PoSt/1122_641755.HtM
BbS.okapop073.sbs/PoSt/1122_414660.HtM
BbS.okapop074.sbs/PoSt/1122_561390.HtM
BbS.okapop075.sbs/PoSt/1122_908270.HtM
BbS.okapop076.sbs/PoSt/1122_729783.HtM
BbS.okapop077.sbs/PoSt/1122_674292.HtM
BbS.okapop078.sbs/PoSt/1122_615846.HtM
BbS.okapop079.sbs/PoSt/1122_965251.HtM
BbS.okapop080.sbs/PoSt/1122_364973.HtM
BbS.okapop081.sbs/PoSt/1122_703482.HtM
BbS.okapop072.sbs/PoSt/1122_827314.HtM
BbS.okapop073.sbs/PoSt/1122_115021.HtM
BbS.okapop074.sbs/PoSt/1122_416094.HtM
BbS.okapop075.sbs/PoSt/1122_601302.HtM
BbS.okapop076.sbs/PoSt/1122_408268.HtM
BbS.okapop077.sbs/PoSt/1122_296781.HtM
BbS.okapop078.sbs/PoSt/1122_332020.HtM
BbS.okapop079.sbs/PoSt/1122_875428.HtM
BbS.okapop080.sbs/PoSt/1122_689594.HtM
BbS.okapop081.sbs/PoSt/1122_871660.HtM

#牛客AI配图神器#

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-20 10:05
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务