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

问题

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

一图胜千言

步骤

打开CodePipeline网页,开始管道创建,如下图:

管道设置,如下图:

这里主要设置管道名称,至于服务角色,直接让codepipeline默认新建就好。下一步设置源代码位置,如下图:

这里主要是设置git代码仓库,以及使用develop分支进行构建,其他都是默认的。接下来进行CodeBuild配置,如下图:

由于我们还没有创建过CodeBuild项目,这里我们点击创建项目,开始一个新CodeBuild项目创建,如下图:

这里有几点需要主要的地方,因为的现在Spring使用的是JDK17,所以,这里需要使用AWS云的Amazon Corretto 17来进行构建,所以这里托管映像,根据Linux 映像运行时页面进行选择,如下图:

选择好项目的Java构建环境后,然后,我们开始设置CodeBuild的脚本配置,这里我们没有在源代码工程里面设置一个文件buildspec.yml,而是选择直接在CodeBuild的web页面里面配置,所以,在第6步,选择了插入构建命令,插入内容如下:

yaml 复制代码
version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto17
  pre_build:
    commands:
      - mvn --version
  build:
    commands:
      - mvn clean && mvn package -Dmaven.test.skip=true
artifacts:
  files:
    - target/*.jar
  discard-paths: yes
cache:
  paths:
    - '/root/.m2/**/*'

这里主要就是使用maven来构建Spring工程,而且JDK是17,然后,把jar文件压缩到构建好的zip压缩包里面,并且去掉原来的父目录进行保存。这里还设置maven的构建缓存。最后点击前往CodePipeline按钮即可。设置完CodeBuild之后,下面开始设置端口,如下图:

这里添加Spring的端口8080,如下图:

下一步,设置部署阶段,如下图:

这里选择Amazon Elastic Beanstalk程序进行部署。第2步和第3步,需要从eb选择,下面就开始从eb主页面创建一个Spring应用和对应的环境。如下图:

开始创建应用程序如下图:

配置环境,如下图:

注意这里上传代码,直接上传的构建好的jar包。设置策略角色,如下图:

这里EC2实例配置文件,就是ec2运行的角色为dev-ec2,策略内容如下图:

eb服务使用的角色aws-elasticbeanstalk-service-role ,策略权限如下:

下一步设置网络,如下图:

设置LB负载均衡器,如下图:

注意这里主要设置EC2的安全组,主要是放开8080端口,然后,把LB侦听器80端改成8080端口(80端口,也可以不用改),默认进程端口改成8080。设置监控系统,如下图:

这里简单设置了一下监控运维的配置,注意是添加了上个环境变量配置,具体如下解释:

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

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

点击创建,开始创建应用程序和环境。

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

最后审核没问题就创建即可,如下图:

等待一段时间,看看CI/CD工作流是否成功了。

查看具体错误,如下图:

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

策略内容如下:

yaml 复制代码
{
	"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。

参考

相关推荐
IAR Systems3 天前
松下电工借助IAR CI/CD解决方案,实现品质与效率双重飞跃
ci/cd
Cherry的跨界思维3 天前
【AI测试全栈:质量】47、Vue+Prometheus+Grafana实战:打造全方位AI监控面板开发指南
vue.js·人工智能·ci/cd·grafana·prometheus·ai测试·ai全栈
Elastic 中国社区官方博客3 天前
Elastic 公共 roadmap 在此
大数据·elasticsearch·ai·云原生·serverless·全文检索·aws
古斯塔夫歼星炮4 天前
Dify + Jenkins 实现AI应用持续集成与自动化部署
ci/cd·jenkins·dify
TG_yunshuguoji4 天前
亚马逊云代理商:AWS 国际站缺卡新用户创建邮箱怎么选择?
安全·云计算·aws
codingWhat4 天前
手把手系列之——前端工程化
ci/cd·devops·前端工程化
TG_yunshuguoji4 天前
亚马逊云代理商:如何监控AWS RDS使用率并设置报警?
运维·云计算·aws
测试渣4 天前
持续集成中的自动化测试框架优化实战指南
python·ci/cd·单元测试·自动化·pytest
翼龙云_cloud4 天前
亚马逊云代理商:如何在 AWS 控制台上手动重启主实例?
服务器·云计算·aws
没有bug.的程序员4 天前
云服务成本优化深度进阶:AWS/Aliyun 资源监控内核、自动伸缩物理建模与 FinOps 降本实战指南
云计算·aws·finops·aliyun·自动伸缩·资源监控·物理建模