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进行构建管理挺简单的。

参考

相关推荐
IT成长日记2 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
热爱生活的猴子2 小时前
阿里云服务器正确配置 Docker 国内镜像的方法
服务器·阿里云·docker
llwszx3 小时前
深入理解Java锁原理(一):偏向锁的设计原理与性能优化
java·spring··偏向锁
FrankYoou6 小时前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
隆里卡那唔6 小时前
在dify中通过http请求neo4j时为什么需要将localhost变为host.docker.internal
http·docker·neo4j
疯子的模样6 小时前
Docker 安装 Neo4j 保姆级教程
docker·容器·neo4j
麦兜*6 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
虚伪的空想家7 小时前
rook-ceph配置dashboard代理无法访问
ceph·云原生·k8s·存储·rook
CHENWENFEIc9 小时前
SpringBoot论坛系统安全测试实战报告
spring boot·后端·程序人生·spring·系统安全·安全测试
庸子10 小时前
基于Jenkins和Kubernetes构建DevOps自动化运维管理平台
运维·kubernetes·jenkins