亚马逊AWS官方博客
从零开始搭建您的CI/CD Pipeline(下)
在上文中我们介绍了基于利用 Github作为代码仓库,并使用CodeBuild进行项目构建的方式和流程。在本文中,我将介绍如何通过CodeDeploy 对上文中的项目通过蓝/绿部署的方式部署到ECS集群中。同时我们还将通过CodePipeline服务把CI及CD的部分集成到一起。
Step 6: 创建您的应用程序负载均衡器和目标组
在本章节中我们将创建一个负载均衡器和两个目标组。稍后在创建 Amazon ECS 服务时,我们会使用该负载均衡器和目标组值。在本示例中,我们选择Application Load Balancer。在本例中,我们将使用Internet-facing的负载均衡器,请把您的ALB放置在公有子网中,且需要跨两个或以上不同可用区。有关负载均衡器和目标组的更多信息,请参阅什么是应用程序负载均衡器。
创建Amazon EC2 应用负载均衡器
- 登录 AWS 管理控制台,打开 Amazon EC2 控制台,您也可以通过 https://console.aws.amazon.com/ec2/进行访问。
- 在导航窗格中,选择负载均衡器。
- 选择创建负载均衡器。
- 选择Application Load Balancer,然后点击创建。
- 在负载均衡器名称中,输入符合命名规则的名称。
- 在模式中,选择面向互联网。
- 在IP地址类型中,选择ipv4。
- 在网络映射中选择相应的VPC,在映射中选取相应的可用区,并在对应可用区中选择一个公有子网。如下图所示:
选择相应的安全组,并在安全组规则中开放80端口。更多关于安全组的配置请参考:您的 VPC 的安全组
9. 在侦听器和路由下为您的负载均衡器配置侦听器端口。
- 在负载均衡器协议下,选择 HTTP。在负载均衡器端口下,输入 80。
- 在默认操作下选择创建目标组,在该页面中选择目标类型中选择实例。然后根据页面引导选择相应的VPC,该VPC应该和我们此前创建的Application Load Balancer隶属于相同的VPC。
为您的负载均衡器创建第二个目标组
基于ECS的蓝绿部署需要两个目标组,此时我们来创建第二个目标组。
- 打开 Amazon EC2 控制台,在导航窗格中,选择目标群组。
- 选择创建目标组。
- 按照与创建第一个目标组相同的方式进行第二个目标组的创建.
Step 7: 创建ECS服务
- 创建一个JSON 文本,命名为create-service.json. 示例内容如下:
- 替换占位符<your-task-name:revision>中的内容。这部分内容来源于Step4中创建的任务定义,您可以在控制台中找到ECS服务,在ECS导航栏中找到任务定义选项,点击我们刚才创建的任务定义就可以看到该字段的内容。在本例中内容如下:”taskDefinition”: “eureka:7″。
- 替换占位符<your-cluster-name>中的内容。集群名称是步骤1中我们设定的集群名称。
- targetGroupArn来源于Step6中创建的目标组,您可以在EC2控制台中找到负载均衡导航栏,点击目标群组,在右侧页面看到您的所有目标组,选择您在Step6中创建的第一个目标组,并查看到它的Arn,填写至targetGroupArn字段。
- containerName来源于Step2中创建的镜像存储库,本例中的镜像名称如下:”containerName”: “eureka”
2. 运行create-service 命令来创建ECS服务,您可以输入自己的服务名称来替代占位符部分的内容。
Step 8: 创建CodeDeploy 应用和部署组(基于ECS平台)
我们需要为当前的ECS服务创建一个CodeDeploy应用和部署组,以上组件在我们部署ECS服务时会被使用。同时,我们还会用到此前步骤中创建的目标组等组件。
创建一个CodeDeploy应用
- 打开CodeDeploy控制台,选择应用程序,点击创建应用程序。
- 输入应用程序的名称,本例中名称为eurekaapp。在计算平台下拉框中选择Amazon ECS。
- 点击创建应用程序。
创建CodeDeploy部署组
- 打开刚才创建好的应用页面,点击创建部署组。
- 根据引导输入部署组的名称,本例中名称为dev.
- 在输入服务角色部分,选择一个角色来让CodeDeploy可以访问ECS服务。如果不存在该角色,需要新创建一个CodeDeploy服务角色。关于如何创建角色,请参考以下步骤:
- 打开IAM服务的控制台:https://console.aws.amazon.com/iam/
- 在控制台左侧选项卡里选择角色。
- 选择创建角色。
- 在选择一个使用案例中,选择CodeDeploy – ECS。 点击下一步:权限标签, 并使用默认的规则。
- 点击下一步:标签
- 点击下一步:审核
- 输入角色名称(例如, CodeDeployECSRole), 并完成创建.
- 在环境配置中,选择下拉框中对应的ECS集群名称,ECS服务名称.
- 在负载均衡器部分,选取我们此前创建的负载均衡器,并在生产监听器的下拉框中选择侦听端口,本例中为“HTTP:80”。
- 在目标组1和目标组2中分别选择我们此前创建的两个目标组。
- 根据您的需要进行部署设置。
- 点击创建部署组。
Step 9: 创建appspec.yaml文件并上传至Github
创建appspec.yaml文件
appspec.yaml文件用于 CodeDeploy 部署。如果您想知道更多关于CodeDeploy如何使用 appspec.yaml 文件的信息(包括示例),请参阅 CodeDeploy AppSpec 文件参考。
本例中我们首先创建名为 appspec.yaml 的文件,其内容如下所示。注意:对于 TaskDefinition,不要更改<TASK_DEFINITION> 占位符文本。此值会在Code Pipeline运行时更新。
本例中的范本如下:
将appspec.yaml推送到您的 Github存储库。
您的文件在github的仓库中目录结构应如下所示:
Step 10: 创建部署管道
本章节中,我们需要通过如下方式创建部署管道
-
- 进入CodePipeline控制台 http://console.aws.amazon.com/codesuite/codepipeline/home.
- 选择创建流水线
- 输入Pipeline名称, 本例中的Pipeline名称为eureka。
- 在服务角色中选择新服务角色,并点击下一步。
- 在源的部分,本例选择Github1作为数据源,按照页面提示连接至Github并点击连接后的确认按钮。选择对应的存储库名称和分支名称。点击下一步。
- 在构建部分,在构建提供程序下拉框中选择AWS Codebuild
- 在区域部分选择选择对应的AWS区域,本例中我们的区域为us-west-2。
- 在项目名称部分,点击输入栏即可自动弹出我们刚才创建好的CodeBuild项目,本例中项目名称为eureka。
- 构建类型选择为默认的单次构建,点击前往CodePipeline
- 进入部署环节,部署部分设置如下:
- 在部署提供程序中选择Amazon ECS (Blue/Green)。并根据提示选择我们刚创建的Codedeploy应用,如下图所示:
-
-
- 在Amazon ECS 任务定义, 选择 BuildArtifact,名称为taskdef.json.
- 在AWS CodeDeploy AppSpec 文件中,选择 BuildArtifact,名称为appspec.yaml.
- 点击下一步.
-
8. 选择创建流水线按钮,进行Pipeline的创建。
截止到当前,我们已经完成了基于EC2部署的ECS集群CI/CD通道的创建。您可以尝试修改代码,并触发管道的运行,并验证您的服务是否可以成功部署。
结论
在以上两篇博文中,您学习了如何以 Github作为代码仓库,通过CodeBuild进行代码构建,并最终通过CodeDeploy ECS集群上执行蓝/绿部署。同时,我们通过CodePipeline为项目设置了完整的 CI/CD 管道,以便在每次项目代码发生变化的时候自动触发编译和部署流程,帮助减少您的总体部署时间。除此之外,Code系列还会保存您的构建和部署记录,方便您在项目维护过程中进行回溯和查阅。