设置持续部署管道

在此教程中,您将学习如何创建自动化软件发布管道以部署实时示例应用程序。您将使用 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 (单个实例) 作为您的环境类型。如果您正在计划远程登录实例,请选择密钥对。否则,将其余选项保留为默认值,并为持续部署管道创建环境。

continuous-delivery-pipeline-1

(单击以缩放)

continuous-delivery-pipeline-1

c. Elastic Beanstalk 将开始创建一个示例环境,供您部署应用程序之用。它将为您的应用程序创建 Amazon EC2 实例、安全组、Auto Scaling 组、Amazon S3 存储桶、Amazon CloudWatch 警报和域名。

注意:完成此过程需要几分钟的时间。

continuous-delivery-pipeline-1c

(单击以缩放)

continuous-delivery-pipeline-1c

在此步骤中,您将检索示例应用程序代码的副本,并选择托管代码的源。管道从源获取代码,然后对其执行操作。

您可以使用以下三个选项之一:GitHub 存储库、Amazon S3 存储桶或 AWS CodeCommit 存储库。选择您的首选项并按照以下步骤操作:

 

  • GitHub

    a.如果您希望使用您的 GitHub 账户:

    continuous-delivery-pipeline-2a

    (单击以缩放)

    continuous-delivery-pipeline-2a
  • Amazon S3

    a. 如果您计划使用 Amazon S3 作为源,您将从 AWS GitHub 存储库中检索示例代码,将其保存到您的计算机,然后将其上传到 Amazon S3 存储桶。

    continuous-delivery-pipeline-2a1

    (单击以缩放)

    continuous-delivery-pipeline-2a1

    b.将源文件保持到您的计算机上:

    • 单击名为 aws-codepipeline-s3-aws-codedeploy_linux.zip 的文件。
    • 单击 View Raw (查看原始文件)
    • 将示例文件保存到本地计算机上。
    continuous-delivery-pipeline-2b2

    (单击以缩放)

    continuous-delivery-pipeline-2b2

    c.单击此处打开 Amazon S3 控制台并创建 Amazon S3 存储桶:

    • 单击 Create Bucket (创建存储桶)
    • Bucket Name (存储桶名称):为您的存储桶键入唯一的名称,例如 awscodepipeline-demobucket-variables。 Amazon S3 中的所有存储桶名称必须是唯一的,因此请使用您自己的存储桶名称,而不要使用示例中显示的名称。
    • Region (区域):在下拉列表中,选择要在其中创建管道的区域,例如 US Standard (美国标准)。 
    • 单击 Create
    continuous-delivery-pipeline-2d

    (单击以缩放)

    continuous-delivery-pipeline-2d

    d. 控制台会显示新创建的存储桶,该存储桶是空的。

    • 单击 Properties (属性)
    • 展开 Versioning (版本控制),然后选择 Enable Versioning (启用版本控制) 。启用版本控制后,Amazon S3 会在存储桶中存储每个对象的每个版本。
    continuous-delivery-pipeline-2g

    (单击以缩放)

    continuous-delivery-pipeline-2g

    e.您现在将示例代码上传到 Amazon S3 存储桶: 

    • 单击 Upload (上传)
    • 按照屏幕上的说明,上传包含从 GitHub 下载的示例代码的 .zip 文件。
    continuous-delivery-pipeline-2f

    (单击以缩放)

    continuous-delivery-pipeline-2f
  • AWS CodeCommit

    a. 如果您计划使用 AWS CodeCommit 作为源,您将从 AWS GitHub 存储库中检索示例代码,将其保存到您的计算机,然后将其上传到 AWS CodeCommit 存储桶。

    continuous-delivery-pipeline-2a1

    (单击以缩放)

    continuous-delivery-pipeline-2a1

    b.将源文件保持到您的计算机上:

    • 选择名为 aws-codepipeline-s3-aws-codedeploy_linux.zip 的文件。
    • 选择 View Raw (查看原始文件)
    • 将示例文件保存到本地计算机上。
    continuous-delivery-pipeline-2b2

    (单击以缩放)

    continuous-delivery-pipeline-2b2

    d.单击此处打开 AWS CodeCommit 控制台并选择 Get Started (入门)

    continuous-delivery-pipeline-2b3

    (单击以缩放)

    continuous-delivery-pipeline-2b3

    e.在 Create new repository (创建新存储库) 页面上:

    • Repository name (存储库名称):输入 PipelineRepo
    • 选择 Create repository (创建存储库)
    continuous-delivery-pipeline-2c3

    (单击以缩放)

    continuous-delivery-pipeline-2c3

    f. 连接到您的存储库,然后将示例文件的副本推送到该存储库。 有关说明,请参阅连接到 AWS CodeCommit 存储库

在此步骤中,您将创建并配置一个包含两个操作的简单管道:源和部署管道。您将为 CodePipeline 提供源存储库和部署环境的位置。


a.单击此处以打开 AWS CodePipeline 控制台。

  • 在“Welcome (欢迎)”页面上,单击 Create pipeline (创建管道)。 
  • 如果这是您第一次使用 AWS CodePipeline,则会显示一个介绍页面,而不是“Welcome (欢迎)”页面。单击 Get Started (开始使用)
continuous-delivery-pipeline-3

(单击以缩放)

continuous-delivery-pipeline-3

b. 在 Step 1: Name (步骤 1:名称) 页面上:

  • Pipeline name (管道名称):输入您的管道名称 DemoPipeline
  • 单击 Next Step (下一步)

注意:当您创建管道后,便无法再更改其名称。

continuous-delivery-pipeline-3b

(单击以缩放)

continuous-delivery-pipeline-3b

c.在 Step 2: Source (步骤2:来源) 页面上,选择所选来源的位置,然后按照以下步骤操作:

  • GitHub

    源提供商:GitHub

    • Connect to GitHub (连接到 GitHub) 部分中,单击 Connect to GitHub (连接到 GitHub)
    • 此时将打开一个新的浏览器窗口,让您连接到 GitHub。如果系统提示您登录,请提供您的 GitHub 凭证。 
    • 系统会要求您授权应用程序访问您的账户。选择 Authorize application (向应用程序授权)
    continuous-delivery-pipeline-3c

    (单击以缩放)

    continuous-delivery-pipeline-3c

    指定存储库和分支:

    • Repository (存储库):在下拉列表中,选择您要用作管道的源位置的 GitHub 存储库。单击 GitHub 账户中的分支存储库,其中包含名为 aws-codepipeline-s3-aws-codedeploy_linux 的示例代码。 
    • Branch (分支):从下拉列表中选择要使用的分支 master
    • 单击 Next step (下一步)
    continuous-delivery-pipeline-3e

    (单击以缩放)

    continuous-delivery-pipeline-3e
  • Amazon S3

    Source provider (源提供商):Amazon S3。

    • Amazon S3 location (Amazon S3 位置):键入您创建的Amazon S3 存储桶的名称,然后键入您复制到该存储桶的示例文件 (aws-codepipeline-s3-aws-codedeploy_linux.zip)。例如,如果您将存储桶命名为 awscodepipeline-demobucket-variable,则应键入:s3://awscodepipeline-demobucket-variable/aws-codepipeline-s3-aws-codedeploy_linux.zip
    • 单击 Next Step (下一步)
    continuous-delivery-pipeline-3c2

    (单击以缩放)

    continuous-delivery-pipeline-3c2
  • AWS CodeCommit

    Source provider (源提供商):AWS CodeCommit

    • Repository name (存储库名称):选择 AWS CodeCommit 存储库的名称。 
    • Branch name (分支名称):选择包含示例文件的分支的名称。
    • 单击 Next Step (下一步)
    continuous-delivery-pipeline-3c3

    (单击以缩放)

    continuous-delivery-pipeline-3c3

d.真正的持续部署管道需要构建阶段,其中对代码进行编译和单元测试。CodePipeline 允许您将首选构建提供商插入管道。不过,在本教程中,您将跳过构建阶段。

  • Step 3: Build (步骤 3:构建) 页面上,选择 No Build (无构建)
  • 单击 Next Step (下一步)

 

continuous-delivery-pipeline-3f

(单击以缩放)

continuous-delivery-pipeline-3f

e.在 Step 4: Beta (步骤 4:测试) 页面上:

  • 部署提供商:单击 AWS Elastic Beanstalk
  • 应用程序名称:单击 My First Elastic Beanstalk Application (我的第一个 Elastic Beanstalk 应用程序)
  • 环境名称:单击 Default-Environment
  • 单击 Next Step (下一步)

注意:名称“Beta”只是默认情况下为管道的这一阶段提供的名称,就像“Source”是管道第一阶段的名称一样。

continuous-delivery-pipeline-3g

(单击以缩放)

continuous-delivery-pipeline-3g

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 的服务角色。

continuous-delivery-pipeline-3fa

(单击以缩放)

continuous-delivery-pipeline-3fa

在此步骤中,您将启动管道。在创建管道后,它将自动开始运行。首先,它检测源位置中的示例应用程序代码,捆绑文件,然后将它们移动到您定义的第二个阶段。在此阶段中,它将代码传递给 Elastic Beanstalk,后者包含将托管代码的 EC2 实例。Elastic Beanstalk 处理将代码部署到 EC2 实例的过程。


a.在 Step 6: Review (步骤 6:审核) 页面中,审核信息,然后单击 Create pipeline (创建管道)

continuous-delivery-pipeline-4

(单击以缩放)

continuous-delivery-pipeline-4

b.创建管道后,将显示管道状态页面,并且管道将自动开始运行。随着管道执行每个操作,您可以查看进度以及成功和失败消息。

要验证管道是否成功运行,请随着管道移动通过每个阶段,监控管道的进度。每个阶段的状态将从 No executions yet 变为 In Progress,然后变为 SucceededFailed。管道将在几分钟内完成首次运行。

continuous-delivery-pipeline-4a

(单击以缩放)

continuous-delivery-pipeline-4a

c.在 Beta 阶段的状态区域中,单击 AWS Elastic Beanstalk。 

continuous-delivery-pipeline-4a2

(单击以缩放)

continuous-delivery-pipeline-4a2

d.此时将打开 AWS Elastic Beanstalk 控制台,其中包含部署的详细信息。

  • 单击先前创建的名为 Default-Environment 的环境。 
continuous-delivery-pipeline-4b

(单击以缩放)

continuous-delivery-pipeline-4b

e.单击页面右上角显示的 URL 以查看您部署的示例网站。

continuous-delivery-pipeline-6e

(单击以缩放)

continuous-delivery-pipeline-6e

在这个步骤中,您将更改示例代码,然后将更改提交到存储库。CodePipeline 将检测更新的示例代码,然后通过 Elastic Beanstalk 自动启动将代码部署到您的 EC2 实例的过程。 

请注意,您部署的示例网页是指 AWS CodeDeploy,这是一项自动执行代码部署的服务。在 CodePipeline 中,CodeDeploy 是使用 Elastic Beanstalk 执行部署操作的替代方法。让我们更新示例代码,以便它正确地说明您使用 Elastic Beanstalk 部署了示例。

  • GitHub

    a.访问您在 GitHub 中分支的存储库副本。

    • 打开 index.html
    • 选择 Edit (编辑) 图标。
    continuous-delivery-pipeline-5b1

    (单击以缩放)

    continuous-delivery-pipeline-5b1

    b.通过复制并粘贴第 30 行的以下文本来更新网页: 

    您已成功创建一个管道,该管道从 GitHub 检索此源应用程序,并使用 AWS Elastic Beanstalk 将其部署到一个 Amazon EC2 实例。您距离实施持续部署还有一步之遥!

    continuous-delivery-pipeline-5c

    (单击以缩放)

    continuous-delivery-pipeline-5c

    c. 将更改提交到您的存储库。

    continuous-delivery-pipeline-5c1

    (单击以缩放)

    continuous-delivery-pipeline-5c1
  • Amazon S3

    a.在桌面上,访问您下载的名为 aws-codepipeline-s3-aws-codedeploy_linux.zip 的 zip 文件。


    b.编辑示例 Web 应用程序代码:

    • 从 zip 文件中提取 index.html 并使用首选文本编辑器打开它。 
    • 更新“Congratulations!”之后的标题文本,使其显示为:

    “您已成功创建一个管道,该管道从 Amazon S3 检索此源应用程序,并使用 AWS Elastic Beanstalk 将其部署到一个 Amazon EC2 实例。您距离实施持续部署还有一步之遥!”

    • 将更新的 index.html 文件复制回 aws-codepipeline-s3-aws-codedeploy_linux.zip 并替换旧版本的 index.html。
    continuous-delivery-pipeline-6b2

    (单击以缩放)

    continuous-delivery-pipeline-6b2

    c.将编辑后的文件重新上传到 Amazon S3 存储桶:

    • 返回您之前创建的 S3 存储桶。 
    • 将更新的 aws-codepipeline-s3-aws-codedeploy_linux.zip 文件上传到存储桶中。 

    注意:由于您在第一次创建 S3 存储桶时启用了版本控制,因此 S3 将保存每个文件版本的副本。

    continuous-delivery-pipeline-6c2

    (单击以缩放)

    continuous-delivery-pipeline-6c2
  • AWS CodeCommit

    a.访问包含您下载的示例代码的名为 aws-codepipeline-s3-aws-codedeploy_linux.zip 的 zip 文件。


    b.编辑示例 Web 应用程序代码:
     
    • 从 zip 文件中提取 index.html 并使用首选文本编辑器打开它。 
    • 然后,更新“Congratulations!”之后的标题文本,使其显示为:

    “您已成功创建一个管道,该管道从 AWS CodeCommit 检索此源应用程序,并使用 AWS Elastic Beanstalk 将其部署到一个 Amazon EC2 实例。您距离实施持续部署还有一步之遥!

    continuous-delivery-pipeline-6b2

    (单击以缩放)

    continuous-delivery-pipeline-6b2

    c.提交更新的 zip 文件并将文件推送到您的 CodeCommit 存储库。


d.在 CodePipeline 控制台中返回到您的管道。几分钟后,您应该看到来源变为蓝色,表示管道已检测到您对源存储库所做的更改。发生这种情况时,它会自动将更新的代码移动到 Elastic Beanstalk。

  • 当管道状态显示 Succeeded (成功) 后,在 Beta 阶段的状态区域中,单击 AWS Elastic Beanstalk
continuous-delivery-pipeline-4a2

(单击以缩放)

continuous-delivery-pipeline-4a2

e.此时将打开 AWS Elastic Beanstalk 控制台,其中包含部署的详细信息。选择先前创建的名为 Default-Environment 的环境。

continuous-delivery-pipeline-4b

(单击以缩放)

continuous-delivery-pipeline-4b

f.单击页面右上角显示的 URL 以再次查看您的示例网站。 您的文本已通过持续部署管道自动更新!

 

continuous-delivery-pipeline-6e

(单击以缩放)

continuous-delivery-pipeline-6e

为了避免将来向您收费,您需要删除在本教程中启动的所有资源,其中包括管道、Elastic Beanstalk 应用程序以及您为托管代码而设置的源。 


a.首先,您将删除您的管道:

  • 在管道视图中,单击 Edit (编辑)。 
  • 单击 Delete (删除)
  • 键入管道的名称,然后单击 Delete (删除)
continuous-delivery-pipeline-5d-6

(单击以缩放)

continuous-delivery-pipeline-5d-6

b.其次,删除您的 Elastic Beanstalk 应用程序:

  • 访问 Elastic Beanstalk 控制台。 
  • 单击 Actions (操作)
  • 然后,单击 Terminate Environment (终止环境)
continuous-delivery-pipeline-6

(单击以缩放)

continuous-delivery-pipeline-6
  • Amazon S3

    c.如果您为本教程创建了 S3 存储桶,请删除您创建的存储桶:

    • 访问 S3 控制台。 
    • 右键单击存储桶名称,然后选择 Delete Bucket (删除存储桶)。 
    • 当确认消息出现时,输入存储桶名称,然后单击 Delete (删除)
    continuous-delivery-pipeline-6d

    (单击以缩放)

    continuous-delivery-pipeline-6d
  • AWS CodeCommit

    c.如果您为本教程创建了 AWS CodeCommit 存储库,请访问 CodeCommit 控制台并删除您创建的存储库:

    continuous-delivery-pipeline-7a

    (单击以缩放)

    continuous-delivery-pipeline-7a

    c.在导航窗格中,选择 Settings (设置)

    • 单击 Delete Repository (删除存储库)
    • 此时将弹出确认窗口。键入存储库的名称,然后单击 Delete (删除)
    continuous-delivery-pipeline-7b

    (单击以缩放)

    continuous-delivery-pipeline-7b

您已使用 AWS CodePipeline 成功创建了自动软件发布管道! 使用 CodePipeline,您创建了一个管道,该管道使用 GitHub、Amazon S3 或 AWS CodeCommit 作为应用程序代码的源位置,然后将代码部署到由 AWS Elastic Beanstalk 管理的 Amazon EC2 实例。每当代码发生更改时,您的管道都会自动部署代码。您距离实施持续部署还有一步之遥!

现在您已学会使用 AWS CodePipeline 创建简单管道,您可以通过访问以下资源了解更多信息。

  • 按照本指南创建更高级的四阶段管道。此管道使用 GitHub 存储库作为源位置,使用 Jenkins 生成服务器来生成并测试项目,并使用 AWS CodeDeploy 应用程序将内置代码部署到暂存服务器。
  • 使用我们的管道初学者工具包,通过 Jenkins 构建服务器快速启动四阶段管道。
  • 了解有关持续交付的更多信息。