继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

基于AWS的Java应用持续集成与持续部署全流程指南:从构建到部署在Amazon EKS上运行

跃然一笑
关注TA
已关注
手记 267
粉丝 40
获赞 164

在这个项目中,我们将在一个Amazon Elastic Kubernetes Service (EKS)上构建并部署一个Java应用程序,同时使用AWS服务,并使用持续集成与持续部署(CI/CD)管道。每个AWS组件都为可靠的DevOps工作流程贡献了自己的力量,因此,本指南对于想要在AWS上构建可扩展解决方案的DevOps工程师来说非常有用。

目录:
  1. 项目概览
  2. 所需条件
  3. 架构图示
  4. 创建 GitHub 仓库
  5. 创建 Amazon ECR 存储库
  6. 构建 Amazon EKS 集群
  7. 构建并配置 CI/CD 流水线
  8. 集成安全与通知服务
  9. 总结

此处省略内容

项目简介

这个项目旨在为一个基于Java的微服务应用自动化构建、测试和部署流程。我们将利用AWS服务,确保从代码提交到生产部署的每一个环节都可靠且安全。以下是我们将要使用的AWS服务概览:

  • GitHub : 代码仓库
  • AWS CodeBuild : 用于构建和测试应用程序
  • AWS CodePipeline : 用于CI/CD编排
  • Amazon Elastic Container Registry (ECR) : 用于存储容器镜像
  • Amazon Elastic Kubernetes Service (EKS) : 用于应用程序部署
  • Amazon CodeGuru : 进行代码质量分析
  • AWS Security Hub : 监控安全漏洞
  • Amazon SNS : 用于发送通知

    • *
      此处省略了部分内容
前提条件

开始前,你需要以下几点:

  1. 具有 ECR、EKS、CodePipeline、CodeBuild、Security Hub 和 SNS 权限的 AWS 账户
  2. 用于存放源代码的 GitHub 仓库
  3. Java 应用程序(最好是微服务架构的应用),包含 Dockerfile,用于容器化。
  4. 本地安装了 Docker,用于本地容器化任务。

来看看架构图吧

以下是一个示例架构图,展示了代表 CI/CD 管道和部署的环境,如下所示,在 AWS 上:

点击图片查看


设置:搭建 GitHub 代码库

第一步:创建您的 GitHub 存储库

  1. 创建一个代码库:
  • 在 GitHub 上登录,创建一个新的仓库,并上传你的 Java 应用源代码。

    1. 添加一个 Dockerfile
  • 在项目的根目录中加入一个 Dockerfile,以定义您 Java 应用程序的容器环境。
    1. 示例 Dockerfile
# 从 openjdk:11-jdk 镜像创建一个新的容器
FROM openjdk:11-jdk
# 设置工作目录为/app
WORKDIR /app
# 将当前目录复制到容器内的/app目录
COPY . /app
# 运行gradlew构建命令
RUN ./gradlew build
# 设置容器启动时默认执行的命令
CMD ["java", "-jar", "build/libs/your-app.jar"]

进入全屏 退出全屏

  1. 将 GitHub 与 AWS CodePipeline 结合起来:
  • 导航到 AWS CodePipeline,然后创建一个新的管道。
  • 选择 GitHub 作为源提供商,并授权 AWS 访问您的仓库。
  • 选择要监控更改的分支(例如 main 分支)。

    1. 创建 GitHub Webhook
  • 在 GitHub 中,首先转到 设置 > Webhooks,然后设置仓库的 webhook。这使 CodePipeline 能够在任何代码推送时自动触发。

    • *
创建 Amazon ECR 存储库(Repository)

亚马逊ECR是一个完全管理的容器注册表。我们将在这里存放Java应用程序的Docker镜像文件。

  1. 创建一个Amazon ECR容器镜像仓库(或简称ECR仓库)
aws ecr create-repository --repository-name my-java-app --region <输入您的区域>  # 请将<输入您的区域>替换为您的具体区域,例如 "ap-northeast-1"

全屏模式, 退出全屏

  1. 用 ECR 验证 Docker
  • 使用以下命令登录您的ECR注册表:
aws ecr get-login-password --region <your-region> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com

使用 AWS CLI 获取密码并登录 Docker 仓库。上述命令用于从 AWS ECR 获取登录密码并通过 Docker 登录 ECR 仓库。

  1. 构建Docker镜像,打上标签并推送
  • 构建Docker图
运行以下命令来构建Docker镜像:  
docker build -t my-java-app .  
这将构建一个名为my-java-app的Docker镜像.
  • 给图片打标签:
docker tag my-java-app:latest <account-id>.dkr.ecr.<region>.amazonaws.com/my-java-app:latest
  • 将镜像推送到ECR仓库
docker push <account-id>.dkr.ecr.<region>.amazonaws.com/my-java-app:latest    

搭建 Amazon EKS 集群: 集群

在 AWS 上,Amazon 弹性 Kubernetes 服务 (EKS) 提供了一个托管的 Kubernetes 集群,我们将用它来部署和管理应用容器。

步骤 1:创建一个 EKS集群

  1. 创建一个EKS集群实例
aws eks create-cluster --name my-eks-cluster --region <your-region> --kubernetes-version 1.21 --role-arn <eks-role-arn>
# your-region 请替换为您的区域, eks-role-arn 请替换为eks角色arn.

全屏 退出全屏

  1. 搭建工作节点(Worker Nodes)
  • 使用 EKS 控制台 或 CLI 设置您的集群以运行应用 Pod 的工作节点组。

    1. 更新 kubeconfig
  • 更新你在本地的 Kubernetes 配置,以便与 EKS 集群交互。
aws eks update-kubeconfig --region <your-region> --name my-eks-cluster

更新 Kubernetes 配置上下文以使用指定的 AWS EKS 集群时,可以使用上面的命令。请注意,<your-region>my-eks-cluster 是需要根据实际情况填写的占位符,分别代表您的区域和 EKS 集群名称。

部署 Java 应用到 EKS

  1. 创建 Kubernetes 部署的 YAML 文件:
  • 定义一个 deployment.yaml 文件,指定副本数量、要使用的 Docker 镜像及其他 Java 应用程序的其他配置。
       apiVersion: apps/v1
       kind: Deployment  # 部署
       metadata:
         name: my-java-app  # 应用名称
       spec:
         replicas: 3  # 副本数量
         selector:
           matchLabels:
             app: my-java-app  # 应用标签
         template:
           metadata:
             labels:
               app: my-java-app  # 应用标签
           spec:
             containers:
             - name: my-java-app  # 容器名称
               image: <account-id>.dkr.ecr.<region>.amazonaws.com/my-java-app:latest  # 镜像地址
               ports:
               - containerPort: 8080  # 容器端口

点击全屏模式 点击退出全屏模式

  1. 部署到 EKS 上
kubectl apply -f deployment.yaml  (执行此命令以应用部署配置)

全屏模式 退出全屏

  1. 创建一个负载均衡器服务
  • 让应用程序通过负载均衡器对外暴露,使得外部可以访问。
apiVersion: api版本
kind: 类型: 服务
metadata:
  name: 名称: my-java-app-service
spec:
  type: 规范:
    类型: 负载均衡器
  selector:
    app: 选择器:
      应用: my-java-app
  ports:
    - protocol: 端口:
        协议: TCP
      port: 端口: 80
      targetPort: 目标端口: 8080

以下是用于my-java-app服务的Kubernetes服务配置。

请进入全屏 请退出全屏

  1. 部署服务:

运行以下命令来应用 service.yaml 文件:

kubectl apply -f service.yaml

点击这里切换到或退出全屏模式


构建和配置 CI/CD 流水线

步骤 1:设置 CodePipeline

  1. 创建CodePipeline流水线,
  • 进入AWS CodePipeline并设置各阶段:

  • 源阶段(GitHub)

  • 构建阶段(CodeBuild)

  • 部署阶段(EKS)

    1. 配置好**CodeBuild**:
  • 定义一个 buildspec.yml 文件来让 CodeBuild 构建 Docker 镜像并推送到 ECR。
       version: 0.2
       phases:
         install:
           runtime-versions:
             java: corretto11
         build:
           commands:
             - echo 正在构建 Docker 镜像。\n
             - docker build -t my-java-app .
             - docker tag my-java-app:latest <account-id>.dkr.ecr.<region>.amazonaws.com/my-java-app:latest
             - docker push <account-id>.dkr.ecr.<region>.amazonaws.com/my-java-app:latest

全屏,退出全屏

  1. 在CodePipeline中设置部署阶段(或步骤)
  • 将EKS集成到CodePipeline中,以实现自动化部署。

步骤 2:自动化的质量和安全检查.

  1. Amazon CodeGuru
  • CodeGuru Reviewer 与 GitHub 进行集成,用来对每个提交进行代码质量检查。

    1. AWS Security Hub
  • 启用Security Hub来监控AWS资源的安全漏洞。

    1. Amazon SNS通知
  • 设置 SNS 以接收构建或部署失败,或安全漏洞警报的通知:
运行以下命令来创建一个名为 'my-devops-notifications' 的主题:
       aws sns create-topic --name my-devops-notifications
使用你的电子邮件地址订阅刚刚创建的主题:
       aws sns subscribe --topic-arn arn:aws:sns:<region>:<account-id>:my-devops-notifications --protocol email --notification-endpoint <your-email>
请替换 `<region>` 和 `<account-id>` 为你的实际值, 并用你的实际电子邮件地址替换 `<your-email>`.

点击此处切换到全屏 点击此处退出全屏

  1. EventBridge 规则自动化
    • 创建 EventBridge 规则,以便基于 CodePipeline 或 Security Hub 事件触发特定操作,例如发送 SNS 通知。

最后

此项目提供了在AWS上构建和部署Java应用程序的完整DevOps解决方案,通过使用Code...(此处应补充具体使用的代码或工具名称,例如CodeCommit、CodePipeline等)。

CI/CD 管道、ECR 用于容器存储以及使用 EKS 进行部署,我们确保操作的可扩展性和可靠性。此外,CodeGuru、Security Hub 和 SNS 分别帮助我们保持代码质量、确保安全和提供实时警报,使这套方案既稳健又符合企业需求。

作者:

banner

加入我们的Telegram社区或在GitHub关注我获取更多关于DevOps的内容!

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP