Jenkins中构建Spring服务并推送到AWS ECR+AWS EKS

问题

需要使用Jenkins中使用Maven构建Spring服务和Docker镜像后,并推送相关Docker镜像到AWS ECR,并发布AWS EKS相关服务。

Jenkinsfile

yaml 复制代码
pipeline {
  agent any

  tools {
      # Jenkins已经安装好了bellsoft-jdk17
      jdk 'bellsoft-jdk17.0.10'
      # Jenkins已经安装好了maven 3.6.3
      maven '3.6.3'
  }

  stages {
    # 检查 java 和 maven版本
    stage('Check tool version') {
      steps {
        sh '''
            env | grep -e PATH -e JAVA_HOME
            which java
            java -version
            which mvn
            mvn --version
        '''
      }
    }
    # 登录到 AWS ECR
    stage('Prepare') {
        steps {
            sh '''
                aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 12342354214352.dkr.ecr.us-east-1.amazonaws.com
            '''
        }
    }
    # 使用maven构建和docker构建
    stage('Build') {
        steps {
            sh '''
                mvn clean && mvn package -Dmaven.test.skip=true
                docker build -t websocket-server .
            '''
        }
    }
    # 打Docker标签
    stage('Tag') {
        steps {
            script {
                if (env.BRANCH_NAME.startsWith('release')){
                    sh '''
                         docker tag websocket-server:latest 12342354214352.dkr.ecr.us-east-1.amazonaws.com/websocket-server:$BRANCH_NAME
                    '''
                } else if (env.BRANCH_NAME.startsWith('uat')){
                    sh '''
                         docker tag websocket-server:latest 12342354214352.dkr.ecr.us-east-1.amazonaws.com/websocket-server:uat
                    '''
                } else {
                    echo 'Skipping Tag.'
                }
            }
        }
    }
    # 推送Docker镜像到ECR
    stage('Push to ECR') {
        steps {
            script {
                if (env.BRANCH_NAME.startsWith('release')){
                    sh '''
                         docker push 12342354214352.dkr.ecr.us-east-1.amazonaws.com/websocket-server:$BRANCH_NAME
                    '''
                } else if (env.BRANCH_NAME.startsWith('uat')){
                    sh '''
                         docker push 12342354214352.dkr.ecr.us-east-1.amazonaws.com/websocket-server:uat
                    '''
                } else {
                    echo 'Skipping Deploy to K8S.'
                }
            }
        }
    }
    # 重启UAT环境EKS集群中的指定服务
    stage('Deploy to EKS') {
        steps {
            script {
                if (env.BRANCH_NAME.startsWith('uat')){
                    sh '''
                        aws eks update-kubeconfig --region us-east-1 --name uat
                        kubectl config current-context
                        kubectl rollout restart deployment websocket-server -n stack-din
                    '''
                } else {
                    echo 'Skipping Deploy to EKS.'
                }
            }
        }
    }

  }
}

总结

使用Jenkinsfile进行构建管理挺简单的。

参考

相关推荐
Bug收容所1 分钟前
12305项目学习day5
java·spring boot·redis·mysql·spring·rocketmq
爱莉希雅&&&2 分钟前
Rocky Linux 10.1 + K8s 1.36.3 离线集群部署笔记(Kubernetes)
linux·笔记·docker·kubernetes·calico
lichuangcsdn3 分钟前
【Spring AI 学习(三)】实现简单的对话
java·人工智能·学习·spring·spring ai
长不胖的路人甲11 分钟前
Spring Bean 完整生命周期
java·spring·rpc
青石路20 分钟前
记一次Qoder排查mave-shade-plugin只重定向部分package导致的NoSuchMethodError问题,查的还挺快的
java·maven
BullSmall1 小时前
Jenkins LTS JDK21 docker-compose.yml(生产可用)
运维·docker·jenkins
念何架构之路1 小时前
docker-Builder镜像构建
运维·docker·容器
xywww1681 小时前
Claude Opus 5 API 接入实战:国内项目上线前的网络、Key、限流和排错清单
大数据·linux·网络·数据库·云计算·aws
日取其半万世不竭10 小时前
用 Portainer 可视化管理 Docker:容器再多也不用背命令了
运维·docker·容器
qq_1851986911 小时前
(Spring Bean + delegateExpression)实现http服务 的完整可运行项目
spring