使用 AWS CodePipeline 自动部署项目到 EC2
![使用AWS CodePipeline自动部署项目到EC2](https://static001.geekbang.org/infoq/2b/2b124d55ef1069ffeef18f3c5f8f1797.png)
AWS CodePipeline 是一项 AWS 服务,用于自动化和协调构建、测试和部署代码更改。它提供了一个持续交付和持续集成的解决方案,可帮助团队更快、更可靠地交付应用程序。有助于提高交付速度、减少错误,同时保持一致性和可靠性。本文以持续部署 Apache 项目代码到 EC2 为例,介绍了使用 CodePipeline 的基本步骤。
1. 创建 CodeCommit 代码仓库,并推送本地数据到远程仓库
在 CodeCommit 中创建代码仓库 aws-codepipeline-demo。
![](https://static001.geekbang.org/infoq/28/28baacc77dca5956c83b0397cbba2fe1.png)
然后使用如下命令,将代码仓库克隆到本地。关于下载代码仓库时用到的凭证,可以参考链接给出的步骤进行配置。
我们以在目标 EC2 服务器部署和启动 httpd 服务为例,进入下载的仓库 aws-codepipeline-demo,创建如下目录结构以及内容。其中,appspec.yml 定义了 CodeDeploy 服务使用的配置,scripts 文件夹的脚本为 CodeDeploy 使用到的脚本。
![](https://static001.geekbang.org/infoq/e1/e173191b12ba95aa3789339db8e5bdd9.png)
然后使用下述命令将内容推送到代码仓库:
push 代码成功后,从 CodeCommit 控制台可以看到已经上传的代码。
![](https://static001.geekbang.org/infoq/cb/cb7375c2b483054dec884fbbf592f35c.png)
2. 创建 EC2 实例,用于部署仓库代码
首先创建一个实例角色,允许在实例上安装和管理 CodeDeploy Agent。选择 Trusted entity type 为 Amazon Web Services service,Use case 选用 EC2,然后下一步进行策略配置;为了方便测试,选用托管的策略 AmazonEC2RoleforAWSCodeDeploy
和 AmazonSSMManagedInstanceCore
,为角色起名为 CodeDeployRoleForEC2。
![](https://static001.geekbang.org/infoq/5a/5ae50bbbf067b23addcb45b7ebacb2df.png)
![](https://static001.geekbang.org/infoq/27/278c99cc4acf457951564580d9504546.png)
角色创建成功后,开始创建用于部署项目代码的 EC2 实例。创建 EC2 实例时,为了测试方便,将实例启动在公有子网中,并为实例自动分配公有 IP;安全组选择放行本地 ip 的所有流量,最后为实例配置角色 CodeDeployRoleForEC2。成功启动后的实例(Name=CodePipelineToEC2Demo)的信息如下:
![](https://static001.geekbang.org/infoq/b6/b643441e0b9227b7e037f12610d609aa.png)
3. 在 CodeDeploy 中创建应用程序
在 CodeDeploy 中,应用程序包含了要部署的软件应用程序的资源。通过 CodePipeline 可将应用程序代码自动部署到 Amazon EC2 实例。接下来在 CodeDeploy 中创建相关资源。
创建 CodeDeploy 服务角色
与为 EC2 配置角色时创建角色步骤相同,这里需要创建可信实体为 CodeDeploy 的角色,同时将AWSCodeDeployRole
托管策略附加到角色,这里创建的角色名称为 CodeDeployRole。
![](https://static001.geekbang.org/infoq/67/67f66bba194dccf9ff5a66d88f4216d3.png)
在 CodeDeploy 中创建应用程序
创建名为 DeplytoEC2-Demo 的应用。Compute Platform 选择 EC2/On-premises。
![](https://static001.geekbang.org/infoq/f8/f80e0d340eb3ec3a5a97a1cb1ec88e0e.png)
在 CodeDeploy 中创建部署组
创建好应用后,在此应用中创建部署组。部署组定义了与部署相关的设置,比如部署到哪些实例以及部署的快慢。如下图所示,创建名为 DeplytoEC2-Demo-Group 的部署组,服务角色选择创建好的 CodeDeployRole,部署类型选用 In-place,环境配置选用之前创建好的 EC2 实例,注意选中实例的 Name=CodePipelineToEC2Demo 标签。Agent configuration 选择 Now and schedule updates,部署配置选择 CodeDeployDefault.OneAtaTime,不选择启用负载均衡配置。
![](https://static001.geekbang.org/infoq/50/501061f97d00be6e58ecd1268ce4db05.png)
![](https://static001.geekbang.org/infoq/5b/5b5766cf934e77234ca699fb4d0465ad.png)
![](https://static001.geekbang.org/infoq/df/dfbe871743f54b1102aeba7dfa0b4a77.png)
4. 在 CodePipeline 中创建 Pipeline
现在开始创建并运行 Pipeline。在此步骤中,创建一个自动将 CodeCommit 存储库中代码推送到目标服务器的 Pipeline。按照如下步骤进行创建。
定义 Pipeline 名称为 CodeDeployToEc2Pipeline,Pipeline 类型选择 V2,服务角色为允许新建角色。
![](https://static001.geekbang.org/infoq/0f/0ff4bf4cbee90e06b450b22c93ec6a5b.png)
下一步在 Source Stage 中选择 Source provider 为 Amazon CodeCommit,仓库名称选择之前创建好的 aws-codepipeline-demo,分支选择main
主分支。Change detection 选用推荐默认的配置。
![](https://static001.geekbang.org/infoq/d6/d60b2db6ea68660399ba26f3edf77e37.png)
跳过 build stage,进入步骤 deploy stage,Deploy provider 选择 Amazon CodeDeploy,Application name 选择之前创建好的 DeploytoEC2-Demo,部署组选择 DeploytoEC2-Demo-Group。然后下一步检查所有配置,确认没有问题后创建 Pipeline。
![](https://static001.geekbang.org/infoq/84/84c6a0250bdeabf761a0a8404e03360f.png)
创建完成后,Pipeline 进入运行状态。
![](https://static001.geekbang.org/infoq/99/9977823368b2b5cb903cf3f13afb3372.png)
部署完成后,可以访问实例 ip 即可检查部署情况。
![](https://static001.geekbang.org/infoq/cb/cbcff4076be5c0d37a8e228d264b24b5.png)
5. 修改仓库代码并提交代码,检验 Pipeline
在命令行执行如下操作,然后观察自动部署情况。从下图可以看到提交代码后,会触发自动部署 Pipeline,部署完成后,访问实例 ip,即可看到页面发生变化。
![](https://static001.geekbang.org/infoq/d4/d4c86fe56ceb75493d1b76d22bdfb373.png)
![](https://static001.geekbang.org/infoq/63/6381c01755b2761ad26b1ac9d75c78bd.png)
以上就是使用 AWS CodePipeline 创建自动部署项目到 EC2 的基本流程。
祝愿世界和平,Peace and Love。
![](https://static001.geekbang.org/infoq/09/090af3fcb34413e4d4494cd5e126804d.png)
评论