设置持续部署管道
在此教程中,您将学习如何创建自动化软件发布管道以部署实时示例应用程序。您将使用 AWS CodePipeline 创建管道,这是一项在每次代码发生更改时构建、测试和部署您的代码的服务。您将使用您的 GitHub 账户,并使用 Amazon Simple Storage Service (S3) 存储桶或 AWS CodeCommit 存储库作为示例应用程序代码的源位置。您还将使用 AWS Elastic Beanstalk 作为示例应用程序的部署目标。您完成的管道将能够检测对包含示例应用程序的源存储库所做的更改,然后自动更新您的实时示例应用程序。
通过持续部署,您可以在未经开发人员明确批准的情况下自动将修订部署到生产环境中,从而实现整个软件发布流程的自动化。
在本教程中完成的所有操作均符合免费套餐条件。
管理 AWS 资源
登录控制台您的持续部署管道将需要一个包含虚拟服务器或 Amazon EC2 实例的目标环境,它将在此部署示例代码。您将在创建管道之前准备此环境。
a. 为了在本教程中简化设置和配置 EC2 实例的过程,您将使用 AWS Elastic Beanstalk 启动示例环境。Elastic Beanstalk 使您可以轻松托管 Web 应用程序,而无需自行启动、配置或操作虚拟服务器。它会自动配置和操作基础设施(例如虚拟服务器、负载平衡器等),并为您提供应用程序堆栈(例如,操作系统、语言和框架、Web 和应用程序服务器等)。
b. 从下拉菜单中选择 PHP,然后单击 Launch Now (立即启动)。
注意:如果您之前已创建了 Elastic Beanstalk 应用程序,请单击右上角的 Create New Application (创建新应用程序)。为应用程序命名并创建新的 Web 服务器环境。选择 PHP 作为您的平台,并选择 Single Instance (单个实例) 作为您的环境类型。如果您正在计划远程登录实例,请选择密钥对。否则,将其余选项保留为默认值,并为持续部署管道创建环境。
c. Elastic Beanstalk 将开始创建一个示例环境,供您部署应用程序之用。它将为您的应用程序创建 Amazon EC2 实例、安全组、Auto Scaling 组、Amazon S3 存储桶、Amazon CloudWatch 警报和域名。
注意:完成此过程需要几分钟的时间。
在此步骤中,您将检索示例应用程序代码的副本,并选择托管代码的源。管道从源获取代码,然后对其执行操作。
您可以使用以下三个选项之一:GitHub 存储库、Amazon S3 存储桶或 AWS CodeCommit 存储库。选择您的首选项并按照以下步骤操作:
在此步骤中,您将创建并配置一个包含两个操作的简单管道:源和部署管道。您将为 CodePipeline 提供源存储库和部署环境的位置。
a.单击此处以打开 AWS CodePipeline 控制台。
- 在“Welcome (欢迎)”页面上,单击 Create pipeline (创建管道)。
- 如果这是您第一次使用 AWS CodePipeline,则会显示一个介绍页面,而不是“Welcome (欢迎)”页面。单击 Get Started (开始使用)。
b. 在 Step 1: Name (步骤 1:名称) 页面上:
- Pipeline name (管道名称):输入您的管道名称 DemoPipeline。
- 单击 Next Step (下一步)。
注意:当您创建管道后,便无法再更改其名称。
c.在 Step 2: Source (步骤2:来源) 页面上,选择所选来源的位置,然后按照以下步骤操作:
d.真正的持续部署管道需要构建阶段,其中对代码进行编译和单元测试。CodePipeline 允许您将首选构建提供商插入管道。不过,在本教程中,您将跳过构建阶段。
- 在 Step 3: Build (步骤 3:构建) 页面上,选择 No Build (无构建)。
- 单击 Next Step (下一步)。
e.在 Step 4: Beta (步骤 4:测试) 页面上:
- 部署提供商:单击 AWS Elastic Beanstalk。
- 应用程序名称:单击 My First Elastic Beanstalk Application (我的第一个 Elastic Beanstalk 应用程序)。
- 环境名称:单击 Default-Environment。
- 单击 Next Step (下一步)。
注意:名称“Beta”只是默认情况下为管道的这一阶段提供的名称,就像“Source”是管道第一阶段的名称一样。
f.在 Step 5: Service Role (步骤 5:服务角色) 页面上:
- 服务角色:单击 Create role (创建角色)。
- 您将被重定向到 IAM 控制台页面,该页面描述将为您创建的 AWS-CodePipeline-Service 角色。单击 Allow (允许)。
- 创建角色后,您将返回到 Step 5: Service Role (步骤 5:服务角色) 页面,其中 AWS-CodePipeline-Service 显示在角色名称中。单击 Next Step (下一步)。
注意:只有第一次在 AWS CodePipeline 中创建管道时才需要创建服务角色。如果已创建服务角色,您将能够从角色下拉列表中选择服务角色。由于下拉列表会显示所有与您的账户相关联的 IAM 服务角色,如果您选择一个非默认的名称,请确保该名称可识别为 AWS CodePipeline 的服务角色。
在此步骤中,您将启动管道。在创建管道后,它将自动开始运行。首先,它检测源位置中的示例应用程序代码,捆绑文件,然后将它们移动到您定义的第二个阶段。在此阶段中,它将代码传递给 Elastic Beanstalk,后者包含将托管代码的 EC2 实例。Elastic Beanstalk 处理将代码部署到 EC2 实例的过程。
a.在 Step 6: Review (步骤 6:审核) 页面中,审核信息,然后单击 Create pipeline (创建管道)。
b.创建管道后,将显示管道状态页面,并且管道将自动开始运行。随着管道执行每个操作,您可以查看进度以及成功和失败消息。
要验证管道是否成功运行,请随着管道移动通过每个阶段,监控管道的进度。每个阶段的状态将从 No executions yet 变为 In Progress,然后变为 Succeeded 或 Failed。管道将在几分钟内完成首次运行。
c.在 Beta 阶段的状态区域中,单击 AWS Elastic Beanstalk。
d.此时将打开 AWS Elastic Beanstalk 控制台,其中包含部署的详细信息。
- 单击先前创建的名为 Default-Environment 的环境。
e.单击页面右上角显示的 URL 以查看您部署的示例网站。
在这个步骤中,您将更改示例代码,然后将更改提交到存储库。CodePipeline 将检测更新的示例代码,然后通过 Elastic Beanstalk 自动启动将代码部署到您的 EC2 实例的过程。
请注意,您部署的示例网页是指 AWS CodeDeploy,这是一项自动执行代码部署的服务。在 CodePipeline 中,CodeDeploy 是使用 Elastic Beanstalk 执行部署操作的替代方法。让我们更新示例代码,以便它正确地说明您使用 Elastic Beanstalk 部署了示例。
d.在 CodePipeline 控制台中返回到您的管道。几分钟后,您应该看到来源变为蓝色,表示管道已检测到您对源存储库所做的更改。发生这种情况时,它会自动将更新的代码移动到 Elastic Beanstalk。
- 当管道状态显示 Succeeded (成功) 后,在 Beta 阶段的状态区域中,单击 AWS Elastic Beanstalk。
e.此时将打开 AWS Elastic Beanstalk 控制台,其中包含部署的详细信息。选择先前创建的名为 Default-Environment 的环境。
f.单击页面右上角显示的 URL 以再次查看您的示例网站。 您的文本已通过持续部署管道自动更新!
为了避免将来向您收费,您需要删除在本教程中启动的所有资源,其中包括管道、Elastic Beanstalk 应用程序以及您为托管代码而设置的源。
a.首先,您将删除您的管道:
- 在管道视图中,单击 Edit (编辑)。
- 单击 Delete (删除)。
- 键入管道的名称,然后单击 Delete (删除)。
b.其次,删除您的 Elastic Beanstalk 应用程序:
- 访问 Elastic Beanstalk 控制台。
- 单击 Actions (操作)。
- 然后,单击 Terminate Environment (终止环境)。
您已使用 AWS CodePipeline 成功创建了自动软件发布管道! 使用 CodePipeline,您创建了一个管道,该管道使用 GitHub、Amazon S3 或 AWS CodeCommit 作为应用程序代码的源位置,然后将代码部署到由 AWS Elastic Beanstalk 管理的 Amazon EC2 实例。每当代码发生更改时,您的管道都会自动部署代码。您距离实施持续部署还有一步之遥!
现在您已学会使用 AWS CodePipeline 创建简单管道,您可以通过访问以下资源了解更多信息。
- 按照本指南创建更高级的四阶段管道。此管道使用 GitHub 存储库作为源位置,使用 Jenkins 生成服务器来生成并测试项目,并使用 AWS CodeDeploy 应用程序将内置代码部署到暂存服务器。
- 使用我们的管道初学者工具包,通过 Jenkins 构建服务器快速启动四阶段管道。
- 了解有关持续交付的更多信息。