当前位置: 首页 > backend >正文

AWS CodePipeline+ Elastic Beanstalk(AWS中国云CI/CD)

问题

最近需要利用AWS云上面的CI/CD部署Spring应用。

一图胜千言

整体架构

步骤

打开CodePipeline网页,开始管道创建,如下图:
开始管道创建
管道设置,如下图:
管道设置
这里主要设置管道名称,至于服务角色,直接让codepipeline默认新建就好。下一步设置源代码位置,如下图:
添加源阶段
这里主要是设置git代码仓库,以及使用develop分支进行构建,其他都是默认的。接下来进行CodeBuild配置,如下图:
添加构建阶段
由于我们还没有创建过CodeBuild项目,这里我们点击创建项目,开始一个新CodeBuild项目创建,如下图:
设置codebuild
这里有几点需要主要的地方,因为的现在Spring使用的是JDK17,所以,这里需要使用AWS云的Amazon Corretto 17来进行构建,所以这里托管映像,根据Linux 映像运行时页面进行选择,如下图:
构建Java环境选择
选择好项目的Java构建环境后,然后,我们开始设置CodeBuild的脚本配置,这里我们没有在源代码工程里面设置一个文件buildspec.yml,而是选择直接在CodeBuild的web页面里面配置,所以,在第6步,选择了插入构建命令,插入内容如下:

version: 0.2phases:install:runtime-versions:java: corretto17pre_build:commands:- mvn --versionbuild:commands:- mvn clean && mvn package -Dmaven.test.skip=true
artifacts:files:- target/*.jardiscard-paths: yes
cache:paths:- '/root/.m2/**/*'

这里主要就是使用maven来构建Spring工程,而且JDK是17,然后,把jar文件压缩到构建好的zip压缩包里面,并且去掉原来的父目录进行保存。这里还设置maven的构建缓存。最后点击前往CodePipeline按钮即可。设置完CodeBuild之后,下面开始设置端口,如下图:
开始端口设置
这里添加Spring的端口8080,如下图:
设置端口8080
下一步,设置部署阶段,如下图:
设置部署阶段
这里选择Amazon Elastic Beanstalk程序进行部署。第2步和第3步,需要从eb选择,下面就开始从eb主页面创建一个Spring应用和对应的环境。如下图:
找到eb
开始创建应用程序如下图:
开始创建应用程序
配置环境,如下图:
配置环境
注意这里上传代码,直接上传的构建好的jar包。设置策略角色,如下图:
设置角色
这里EC2实例配置文件,就是ec2运行的角色为dev-ec2,策略内容如下图:
ec2角色策略
eb服务使用的角色aws-elasticbeanstalk-service-role ,策略权限如下:
eb服务角色权限
下一步设置网络,如下图:
设置网络
设置LB负载均衡器,如下图:
设置负载均衡器
注意这里主要设置EC2的安全组,主要是放开8080端口,然后,把LB侦听器80端改成8080端口(80端口,也可以不用改),默认进程端口改成8080。设置监控系统,如下图:
监控系统和环境变量设置
这里简单设置了一下监控运维的配置,注意是添加了上个环境变量配置,具体如下解释:

  • PORT:Spring端口,这个环境变量是eb的应用程序端口环境变量;
  • CACHE_DB_HOST:这个是自定义环境变量,在Spring中的用的,主要用来连接redis;
  • DB_HOST:这个是自定义环境变量,在Spring中的用的,主要用来连接db。

下一步进入审核页面,没问题的话,就直接创建就好,如下图:

创建应用程序和环境
点击创建,开始创建应用程序和环境。
eb应用程序和环境创建完成
等待一段时间(如果慢就尝试改成s3上传jar文件),等eb应用程序和环境创建好之后,回到CodePipeline添加部署阶段页面重新设置eb部署页面如下:

设置code pipeline部署阶段
最后审核没问题就创建即可,如下图:
审核创建页面
等待一段时间,看看CI/CD工作流是否成功了。

CodePipeline部署失败
查看具体错误,如下图:
权限步骤
这是CodePipeline这边说,提供的角色缺少eb相关权限,我们再结合CloudTrail日志记录,可以看出是AWSCodePipelineServiceRole-cn-north-1-dev-spring角色没有eb相关权限。现在只要给这个角色添加eb相关权限即可。创建自定义权限策略如下图:
创建自定义权限策略
策略内容如下:

{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["elasticbeanstalk:*","ec2:*","elasticloadbalancing:*","autoscaling:*","cloudwatch:*","s3:*","sns:*","cloudformation:*","rds:*","sqs:*","ecs:*","logs:*"],"Resource": "*"}]
}

注意这里"Resource": "*"这个部分,没有明确具体的云资源,权限有点太开了。这里需要我们一步步调,把涉及到资源,一个个添加到这里,这里只是做简单处理。
最后效果如下图:
完成
最后,CI/CD工作流没有问题之后,我们直接点击发布更改完成最后的操作即可。

总结

AWS中国云 CI/CD工作流还是比较容易的。EB还是节省我大量的部署工作量的。这就是由Code Commit(git)+CodeBuild(maven)+Elastic Beanstalk(部署)+CodePipeline(统一管理CI/CD工作流)共同组成的CI/CD。

参考

  • End-to-End CI/CD with AWS: How to Use CodePipeline, CodeBuild, and Elastic Beanstalk
  • ElasticBeanstalk部署操作
  • Linux 映像运行时
  • AWS Elastic Beanstalk控制台部署Spring极简工程(LB版)
  • AWS CI/CD之三:CodePipeline
  • AWS CI/CD之一:CodeBuild配置(Spring版)
http://www.xdnf.cn/news/7512.html

相关文章:

  • HCIP实验五
  • MyBatis实战指南(一)MyBatis入门基础与利用IDEA从零开始搭建你的第一个MyBatis系统
  • linux关闭某端口暂用的进程
  • 【前端开发】Uniapp日期时间选择器:实现分钟动态步长设置
  • 链表面试题9之环形链表进阶
  • 微服务架构中的多进程通信--内存池、共享内存、socket
  • Canvas SVG BpmnJS编辑器中Canvas与SVG职能详解
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Rotating Navigation (旋转导航)
  • 新浪《经济新闻》丨珈和科技联合蒲江政府打造“数字茶园+智能工厂+文旅综合体“创新模式
  • Python、Pytorch、TensorFlow、Anconda、PySide、Jupyter
  • 欧拉系统离线部署docker
  • iOS苹果和Android安卓测试APP应用程序的区别差异
  • 【Linux】进程间通信(三):命名管道
  • 嵌入式开发学习日志(linux系统编程--文件读写函数)Day24
  • vr制作公司提供什么服务?
  • Linux跨网络通信中IP与MAC的作用
  • Electron+vite+vue3 从0到1搭建项目,开发Win、Mac客户端
  • spark调度系统核心组件SparkContext、DAGSchedul、TaskScheduler介绍
  • 项目管理进阶:基于IPD流程的项目管理部分问题及建议书【附全文阅读】
  • 怎么样进行定性分析
  • 交通拥堵预测器(python)
  • Linux云计算训练营笔记day11【Linux CentOS7(cat、less、head、tail、lscpu、lsblk、hostname、vim、which、mount、alias)】
  • Python训练营打卡——DAY30(2025.5.19)
  • 苹果的人工智能领域慢热
  • esp32课设记录(三)mqtt通信记录 附mqtt介绍
  • thinkphp6实现统一监听并记录所有执行的sql语句除查询外
  • 2021-10-29 C++求位数及各位和
  • MathType公式如何按照(1)(2)…编号
  • 定积分的“偶倍奇零”性质及其使用条件
  • 软件设计师“关系模式和关系代数”真题考点分析——求三连