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

参考

相关推荐
trayvontang22 分钟前
Spring Gateway核心概念、流程及原理
spring·gateway·spring gateway
喵叔哟43 分钟前
16.项目架构设计
后端·docker·容器·.net
jasnet_u1 小时前
nexus3私服使用及setting.xml配置
maven·nexus
虫小宝1 小时前
导购APP容器化CI/CD流程:Jenkins在返利系统持续部署中的实践
运维·ci/cd·jenkins
眠りたいです1 小时前
Docker核心技术和实现原理第一部分-Docker镜像制作
运维·docker·容器·集群·镜像·dockerfile
面对疾风叭!哈撒给1 小时前
Liunx之Docker 安装启动 influxdb2
java·spring cloud·docker
liuc03171 小时前
docker下安装mysql
mysql·docker·容器
嚣张丶小麦兜1 小时前
docker的简单应用
前端·docker
麦兜*1 小时前
Spring Boot 启动过程全解析:从main方法到Tomcat启动的魔法之旅
java·spring boot·后端·spring·tomcat·firefox
IT老胡1 小时前
Docker入门与实操(1):Docker简介
运维·docker·容器