写点什么

使用 AWS CodePipeline 自动部署项目到 EC2

作者:王坤祥
  • 2023-11-14
    北京
  • 本文字数:2444 字

    阅读完需:约 8 分钟

使用AWS CodePipeline自动部署项目到EC2

AWS CodePipeline 是一项 AWS 服务,用于自动化和协调构建、测试和部署代码更改。它提供了一个持续交付和持续集成的解决方案,可帮助团队更快、更可靠地交付应用程序。有助于提高交付速度、减少错误,同时保持一致性和可靠性。本文以持续部署 Apache 项目代码到 EC2 为例,介绍了使用 CodePipeline 的基本步骤。

1. 创建 CodeCommit 代码仓库,并推送本地数据到远程仓库

在 CodeCommit 中创建代码仓库 aws-codepipeline-demo。

创建代码仓库


然后使用如下命令,将代码仓库克隆到本地。关于下载代码仓库时用到的凭证,可以参考链接给出的步骤进行配置。

git clone https://git-codecommit.cn-north-1.amazonaws.com.cn/v1/repos/aws-codepipeline-demo
复制代码


我们以在目标 EC2 服务器部署和启动 httpd 服务为例,进入下载的仓库 aws-codepipeline-demo,创建如下目录结构以及内容。其中,appspec.yml 定义了 CodeDeploy 服务使用的配置,scripts 文件夹的脚本为 CodeDeploy 使用到的脚本。

项目文件目录


# appspec.ymlversion: 0.0os: linuxfiles:  - source: /index.html    destination: /var/www/html/hooks:  BeforeInstall:    - location: scripts/install_dependencies      timeout: 300      runas: root    - location: scripts/start_server      timeout: 300      runas: root  ApplicationStop:    - location: scripts/stop_server      timeout: 300      runas: root
# index.html<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Sample Deployment</title> <style> body { color: #ffffff; background-color: #0188cc; font-family: Arial, sans-serif; font-size: 14px; }
h1 { font-size: 500%; font-weight: normal; margin-bottom: 0; }
h2 { font-size: 200%; font-weight: normal; margin-bottom: 0; } </style></head><body> <div align="center"> <h1>Congratulations</h1> <h2>This application was deployed using AWS CodeDeploy.</h2> <p>For next steps, read the <a href="https://docs.amazonaws.cn/codedeploy/">AWS CodeDeploy Documentation</a>.</p> </div></body></html>
# scripts/install_dependencies#!/bin/bashyum install -y httpd
# scripts/start_server#!/bin/bashsystemctl start httpd
# scripts/stop_serversystemctl stop httpd
复制代码


然后使用下述命令将内容推送到代码仓库:

git add -Agit commit -m "Add sample application files"git push
复制代码


push 代码成功后,从 CodeCommit 控制台可以看到已经上传的代码。

仓库文件


2. 创建 EC2 实例,用于部署仓库代码

首先创建一个实例角色,允许在实例上安装和管理 CodeDeploy Agent。选择 Trusted entity type 为 Amazon Web Services service,Use case 选用 EC2,然后下一步进行策略配置;为了方便测试,选用托管的策略 AmazonEC2RoleforAWSCodeDeployAmazonSSMManagedInstanceCore ,为角色起名为 CodeDeployRoleForEC2。

角色信任实体


角色策略内容


角色创建成功后,开始创建用于部署项目代码的 EC2 实例。创建 EC2 实例时,为了测试方便,将实例启动在公有子网中,并为实例自动分配公有 IP;安全组选择放行本地 ip 的所有流量,最后为实例配置角色 CodeDeployRoleForEC2。成功启动后的实例(Name=CodePipelineToEC2Demo)的信息如下:

EC2实例信息


3. 在 CodeDeploy 中创建应用程序

在 CodeDeploy 中,应用程序包含了要部署的软件应用程序的资源。通过 CodePipeline 可将应用程序代码自动部署到 Amazon EC2 实例。接下来在 CodeDeploy 中创建相关资源。


创建 CodeDeploy 服务角色

与为 EC2 配置角色时创建角色步骤相同,这里需要创建可信实体为 CodeDeploy 的角色,同时将AWSCodeDeployRole 托管策略附加到角色,这里创建的角色名称为 CodeDeployRole。

创建CodeDeployRole


在 CodeDeploy 中创建应用程序

创建名为 DeplytoEC2-Demo 的应用。Compute Platform 选择 EC2/On-premises

创建Application


在 CodeDeploy 中创建部署组

创建好应用后,在此应用中创建部署组。部署组定义了与部署相关的设置,比如部署到哪些实例以及部署的快慢。如下图所示,创建名为 DeplytoEC2-Demo-Group 的部署组,服务角色选择创建好的 CodeDeployRole,部署类型选用 In-place,环境配置选用之前创建好的 EC2 实例,注意选中实例的 Name=CodePipelineToEC2Demo 标签。Agent configuration 选择 Now and schedule updates,部署配置选择 CodeDeployDefault.OneAtaTime,不选择启用负载均衡配置。

配置部署组(1)


配置部署组(2)


配置部署组(3)


4. 在 CodePipeline 中创建 Pipeline

现在开始创建并运行 Pipeline。在此步骤中,创建一个自动将 CodeCommit 存储库中代码推送到目标服务器的 Pipeline。按照如下步骤进行创建。

定义 Pipeline 名称为 CodeDeployToEc2Pipeline,Pipeline 类型选择 V2,服务角色为允许新建角色。

选择Pipeline设置


下一步在 Source Stage 中选择 Source provider 为 Amazon CodeCommit,仓库名称选择之前创建好的 aws-codepipeline-demo,分支选择main主分支。Change detection 选用推荐默认的配置。

配置Source Stage


跳过 build stage,进入步骤 deploy stage,Deploy provider 选择 Amazon CodeDeploy,Application name 选择之前创建好的 DeploytoEC2-Demo,部署组选择 DeploytoEC2-Demo-Group。然后下一步检查所有配置,确认没有问题后创建 Pipeline。

配置Deploy Stage


创建完成后,Pipeline 进入运行状态。

启动Pipeline

部署完成后,可以访问实例 ip 即可检查部署情况。

测试项目部署情况


5. 修改仓库代码并提交代码,检验 Pipeline

在命令行执行如下操作,然后观察自动部署情况。从下图可以看到提交代码后,会触发自动部署 Pipeline,部署完成后,访问实例 ip,即可看到页面发生变化。

# 修改行内容sed -i 's/<h1>Congratulations<\/h1>/<h1>欢迎使用亚马逊云<\/h1>/' index.html
# 提交代码到codecommitgit add index.htmlgit commit -m "modify title"git push
复制代码


提交代码触发流水线自动部署


检查代码更改生效


以上就是使用 AWS CodePipeline 创建自动部署项目到 EC2 的基本流程。

祝愿世界和平,Peace and Love。


用户头像

王坤祥

关注

日拱一卒,功不唐捐。 2017-10-17 加入

不懂热能的低温工程师不是好程序猿

评论

发布
暂无评论
使用AWS CodePipeline自动部署项目到EC2_亚马逊云_王坤祥_InfoQ写作社区