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

参考

相关推荐
阿福不是狗2 小时前
Python使用总结之Mac安装docker并配置wechaty
python·macos·docker
zmm04205 小时前
Could not get unknown property ‘mUser‘ for Credentials [username: null]
jenkins·gradle
藥瓿亭6 小时前
K8S认证|CKS题库+答案| 3. 默认网络策略
运维·ubuntu·docker·云原生·容器·kubernetes·cks
背太阳的牧羊人7 小时前
sudo docker exec -it backend bash 以交互方式(interactive)进入正在运行的 Docker 容器的命令行环境
docker·容器·bash
gsls2008088 小时前
ocrapi服务docker镜像使用
运维·docker·容器
AWS官方合作商8 小时前
基于AWS Serverless架构:零运维构建自动化SEO内容生成系统
运维·serverless·aws
爱宇阳9 小时前
使用 Docker Compose 从零部署 TeamCity + PostgreSQL(详细新手教程)
docker·postgresql·容器
whp4049 小时前
windows server2019 不成功的部署docker经历
运维·docker·容器
风铃儿~9 小时前
Spring AI 入门:Java 开发者的生成式 AI 实践之路
java·人工智能·spring
keson要进步10 小时前
CICD实战(一) -----Jenkins的下载与安装
运维·ci/cd·centos·自动化·jenkins