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

参考

相关推荐
有毒的教程1 小时前
Ubuntu 清理 Docker 镜像 / 容器 / 缓存 完整教程
ubuntu·缓存·docker
亚马逊云开发者1 小时前
用 Bedrock AgentCore SDK 把 OpenClaw Agent 部署到 AWS 托管运行时:从本地开发到生产上线全流程
云计算·aws
winfreedoms2 小时前
宿主机有网、Docker 容器不能解析域名?用 daemon.json 一键配置永久 DNS
运维·docker·容器·json
橙露2 小时前
Docker 实战:镜像瘦身、多阶段构建与最佳实践
运维·docker·容器
TT哇2 小时前
【项目】从“本地能跑”到“生产级部署”:Java + Docker 自动化部署深度复盘
java·docker·自动化
亚马逊云开发者3 小时前
代码一推自动上线:EKS + CodePipeline + Argo CD 搭建 GitOps 实战
aws
susu10830189113 小时前
roboflow的trackers追踪
docker
亚马逊云开发者3 小时前
MySQL 实时入湖零运维?S3 Tables 两种方案实战
aws
小李小李快乐不已4 小时前
docker(1)-环境和基本概念
运维·c++·docker·容器
God__is__a__girl4 小时前
Docker Desktop 在 Windows 上启动失败:500 Internal Server Error 完整排查与修复指南
windows·docker·容器