教程:创建一个简单的管道(CodeCommit 存储库) - Amazon CodePipeline
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

教程:创建一个简单的管道(CodeCommit 存储库)

在本教程中,使用 CodePipeline 将 CodeCommit 存储库中维护的代码部署到单个 Amazon EC2 实例。将更改推送到 CodeCommit 存储库时会触发管道。管道使用 CodeDeploy 作为部署服务,将您的更改部署到 Amazon EC2 实例。

重要

作为创建管道的一部分,CodePipeline 将使用客户提供的 S3 构件存储桶来存放构件。(这与用于 S3 源操作的存储桶不同。) 如果 S3 构件存储桶所在的账户与您的管道账户不同,请确保 S3 构件存储桶归 Amazon Web Services 账户所有,并且安全可靠。

管道具有两个阶段:

  • CodeCommit 源操作的源阶段()。

  • CodeDeploy 部署操作的部署阶段(部署)。

开始使用 Amazon CodePipeline 的最简单方法是使用 CodePipeline 控制台中的创建管道向导。

注意

在开始之前,请确保您已将 Git 客户端设置为与 CodeCommit 配合使用。有关说明,请参阅为 CodeCommit 进行设置

步骤 1:创建 CodeCommit 存储库

首先,在 CodeCommit 中创建一个存储库。您的管道在运行时将从该存储库获取源代码。您还将创建一个本地存储库,您可以先在该存储库中维护和更新代码,然后再将其推送到 CodeCommit 存储库。

创建 CodeCommit 存储库

  1. 打开 CodeCommit 控制台(https://console.aws.amazon.com/codecommit)。

  2. 在区域选择器中,选择要在其中创建存储库和管道的 Amazon Web Services 区域。有关更多信息,请参阅Amazon Web Services 区域 和端点

  3. 存储库页面上,选择创建存储库

  4. 创建存储库页面上的存储库名称中,输入存储库的名称(例如,MyDemoRepo)。

  5. 选择创建

注意

本教程中的剩余步骤使用 MyDemoRepo 作为 CodeCommit 存储库的名称。如果您选择其他名称,请确保在本教程中通篇使用它。

设置本地存储库

在此步骤中,设置一个本地存储库,以连接到您的远程 CodeCommit 存储库。

注意

您无需设置本地存储库。还可以使用此控制台上传文件(如步骤 2:向 CodeCommit 存储库添加示例代码所述)。

  1. 在控制台中打开您的新存储库,选择页面右上角的克隆 URL,然后选择克隆 SSH。用于克隆 Git 存储库的地址复制到您的剪贴板。

  2. 在您的终端窗口或命令行中,导航到您要用来存储本地存储库的本地目录。在本教程中,我们使用 /tmp

  3. 运行以下命令以克隆存储库,使用您在上一步中复制的地址替换 SSH 地址。此命令创建一个名为 MyDemoRepo 的目录。您将示例应用程序复制到此目录。

    git clone ssh://git-codecommit.us-west-2.amazonaws.com/v1/repos/MyDemoRepo

步骤 2:向 CodeCommit 存储库添加示例代码

在此步骤中,您下载为 CodeDeploy 示例演练创建的示例应用程序的代码,并将其添加到您的 CodeCommit 存储库。

  1. 接下来,下载一个示例,并将该示例保存到本地计算机上的文件夹或目录中。

    1. 选择下列选项之一。如果要对 Linux 实例执行本教程中的步骤,请选择 SampleApp_Linux.zip

      • 如果要使用 CodeDeploy 部署到 Amazon Linux 实例,请在此处下载示例应用程序:SampleApp_Linux.zip

      • 如果要使用 CodeDeploy 部署到 Windows Server 实例,请在此处下载示例应用程序:SampleApp_Windows.zip

      示例应用程序包含以下用于使用 CodeDeploy 进行部署的文件:

      • appspec.yml - 应用程序规范文件(AppSpec 文件)是 YAML 格式文件,由 CodeDeploy 用来管理部署。有关 AppSpec 文件的更多信息,请参阅 Amazon CodeDeploy 用户指南 中的 CodeDeploy AppSpec 文件参考

      • index.html - 索引文件包含已部署的示例应用程序的主页。

      • LICENSE.txt - 许可证文件包含示例应用程序的许可证信息。

      • 脚本文件 - 示例应用程序使用脚本将文本文件写入实例上的某个位置。为多个 CodeDeploy 部署生命周期事件分别写入一个文件,如下所示:

        • (仅限 Linux 示例)scripts 文件夹 - 该文件夹包含以下 shell 脚本,用于安装依赖项以及启动和停止自动部署的示例应用程序:install_dependenciesstart_serverstop_server

        • (仅限 Windows 示例)before-install.bat - 此批处理脚本用于 BeforeInstall 部署生命周期事件,它将运行以删除此示例在先前部署中写入的旧文件,并在您的实例上创建一个位置用于写入新文件。

    2. 下载压缩(zipped)文件。

  2. SampleApp_Linux.zip 中的文件解压缩到您之前创建的本地目录中(例如,/tmp/MyDemoRepoc:\temp\MyDemoRepo)。

    务必将文件直接放到本地存储库中。不要包括 SampleApp_Linux 文件夹。例如,在您的本地 Linux、macOS 或 Unix 计算机上,您的目录和文件层次结构应如下所示:

    /tmp └-- MyDemoRepo │-- appspec.yml │-- index.html │-- LICENSE.txt └-- scripts │-- install_dependencies │-- start_server └-- stop_server
  3. 要将文件上传到您的存储库,请使用以下方法之一。

    1. 使用 CodeCommit 控制台上传文件:

      1. 打开 CodeCommit 控制台,然后从存储库列表中选择您的存储库。

      2. 选择添加文件,然后选择上传文件

      3. 选择选择文件,然后浏览找到您的文件。要在文件夹下添加文件,请选择创建文件,然后输入带有文件名的文件夹名称,例如 scripts/install_dependencies。将文件内容粘贴到新文件中。

        通过输入您的用户名和电子邮件地址来提交更改。

        选择提交更改

      4. 对每个文件重复此步骤。

        您的存储库内容应如下所示:

        │-- appspec.yml │-- index.html │-- LICENSE.txt └-- scripts │-- install_dependencies │-- start_server └-- stop_server
    2. 使用 git 命令上传文件:

      1. 将目录更改为本地存储库:

        (For Linux, macOS, or Unix) cd /tmp/MyDemoRepo (For Windows) cd c:\temp\MyDemoRepo
      2. 运行以下命令以立即暂存您的所有文件:

        git add -A
      3. 运行以下命令以提交带有提交消息的文件:

        git commit -m "Add sample application files"
      4. 运行以下命令以将文件从您的本地存储库推送到您的 CodeCommit 存储库:

        git push
  4. 您下载并添加到本地存储库的文件现已添加到 CodeCommit MyDemoRepo 存储库中的 main 分支,并随时可包括在您的管道中。

步骤 3:创建 Amazon EC2 Linux 实例并安装 CodeDeploy 代理

在此步骤中,您将创建要在其中部署示例应用程序的 Amazon EC2 实例。在此过程中,创建一个实例角色,以允许在实例上安装和管理 CodeDeploy 代理。CodeDeploy 代理是支持在 CodeDeploy 部署中使用实例的软件包。还可以附加策略,允许实例获取 CodeDeploy 代理用于部署应用程序的文件,并允许 SSM 管理该实例。

创建实例角色
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在控制台控制面板中,选择角色

  3. 选择创建角色

  4. 选择受信任实体的类型下,选择 Amazon Web Services 服务。在选择使用案例下,选择 EC2。在选择您的使用案例下,选择 EC2。选择下一步:权限

  5. 搜索名为 AmazonEC2RoleforAWSCodeDeploy 的策略并将其选中。

  6. 搜索名为 AmazonSSMManagedInstanceCore 的策略并将其选中。选择下一步:标签

  7. 选择下一步:审核。输入角色的名称(例如 EC2InstanceRole)。

    注意

    记下您的角色名称以便在下一步中使用。在创建实例时选择此角色。

    选择创建角色

启动实例
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在侧面导航栏中,选择实例,然后从页面顶部选择启动实例

  3. 名称中,输入 MyCodePipelineDemo。这会为实例分配标签 Name 和标签值 MyCodePipelineDemo。稍后,您将创建一个 CodeDeploy 应用程序,用于将示例应用程序部署到此实例。CodeDeploy 根据标签选择要部署的实例。

  4. 应用程序和操作系统映像(Amazon 机器映像) 下,找到带有 Amazon 徽标的 Amazon Linux AMI 选项,并确保将其选中。(此 AMI 称为 Amazon Linux 2 AMI (HVM),并标记为“符合免费套餐条件”。)

  5. 实例类型下,选择符合免费套餐条件的 t2.micro 类型作为实例的硬件配置。

  6. 密钥对(登录) 下,选择或创建密钥对。

    也可以选择继续操作但不提供密钥对

    注意

    在本教程中,您可以继续操作而不提供密钥对。要使用 SSH 连接到实例,请创建或使用密钥对。

  7. 网络设置下,执行以下操作:

    自动分配公有 IP 中,确保状态为启用

    对于创建的安全组,选择 HTTP,然后在源类型下选择我的 IP

  8. 展开高级详细信息。在 IAM 实例配置文件中,选择您在上一过程中创建的 IAM 角色(例如 EC2InstanceRole)。

  9. 摘要下的实例数下,输入 1

  10. 选择启动实例

  11. 您可以在实例页面上查看启动的状态。启动实例时,其初始状态为 pending。实例启动后,其状态变为 running,并且会收到一个公有 DNS 名称。(如果公有 DNS 列不显示,请选择显示/隐藏图标,然后选择公有 DNS。)

步骤 4:在 CodeDeploy 中创建应用程序

在 CodeDeploy 中,应用程序 是包含了要部署的软件应用程序的资源。稍后,您与 CodePipeline 配合使用此应用程序,以便将示例应用程序自动部署到您的 Amazon EC2 实例。

首先,您需要创建一个角色来允许 CodeDeploy 执行部署。然后,创建 CodeDeploy 应用程序。

创建 CodeDeploy 服务角色
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在控制台控制面板中,选择角色

  3. 选择创建角色

  4. 选择受信任实体下,选择 Amazon Web Services 服务。在使用案例下,选择 CodeDeploy。从列出的选项中选择 CodeDeploy。选择下一步AWSCodeDeployRole 托管策略已附加到角色。

  5. 选择下一步

  6. 输入角色的名称(例如 CodeDeployRole),然后选择创建角色

在 CodeDeploy 中创建应用程序
  1. https://console.aws.amazon.com/codedeploy 打开 CodeDeploy 控制台。

  2. 如果未显示应用程序页面,请在菜单上选择应用程序

  3. 选择创建应用程序

  4. 应用程序名称中,输入 MyDemoApplication

  5. Compute Platform(计算平台)中,选择 EC2/On-premises(EC2/本地)

  6. 选择创建应用程序

在 CodeDeploy 中创建部署组

部署组是定义了部署相关设置(例如,要部署到哪些实例以及部署它们的速度有多快)的资源。

  1. 在显示应用程序的页面上,选择创建部署组

  2. Deployment group name(部署组名称)中,输入 MyDemoDeploymentGroup

  3. 服务角色中,选择您之前创建的服务角色的 ARN(例如,arn:aws:iam::account_ID:role/CodeDeployRole)。

  4. 部署类型下,选择就地

  5. 环境配置下,选择 Amazon EC2 实例。在字段中,输入 Name。在字段中,输入您用于标记实例的名称(例如,MyCodePipelineDemo)。

  6. 使用 Amazon Systems Manager 的配置代理下,选择现在及调度更新。这将在实例上安装代理。Linux 实例已配置 SSM 代理,现在将使用 CodeDeploy 代理进行更新。

  7. 部署配置中,选择 CodeDeployDefault.OneAtaTime

  8. 负载均衡器下,确保未选中启用负载均衡。您无需为此示例设置负载均衡器或选择目标组。

  9. 选择 Create deployment group(创建部署组)

步骤 5:在 CodePipeline 中创建第一个管道

现在您已经可以创建并运行您的第一个管道。在此步骤中,您将创建一个管道,此管道将在代码推送到 CodeCommit 存储库时自动运行。

创建 CodePipeline 管道。
  1. 通过以下网址登录Amazon Web Services 管理控制台并打开 CodePipeline 控制台:http://console.aws.amazon.com/codesuite/codepipeline/home

    https://console.aws.amazon.com/codepipeline/ 打开 CodePipeline 控制台。

  2. 欢迎页面、入门页面或管道页面上,选择创建管道

  3. 步骤 1:选择创建选项页面上的创建选项下,选择构建自定义管道选项。选择下一步

  4. 步骤 2:选择管道设置管道名称中,输入 MyFirstPipeline

  5. CodePipeline 提供 V1 和 V2 类型的管道,它们在特性和价格上有所不同。在控制台中,您只能选择 V2 类型。有关更多信息,请参阅管道类型。有关 CodePipeline 的定价信息,请参阅定价

  6. 服务角色中,选择新建服务角色,以允许 CodePipeline 在 IAM 中创建服务角色。

  7. 高级设置中的各项设置保留为默认值,然后选择下一步

  8. 步骤 3:添加源阶段源提供程序中,选择 CodeCommit。在存储库名称中,选择您在步骤 1:创建 CodeCommit 存储库中创建的 CodeCommit 存储库的名称。在分支名称中,选择 main,然后选择下一步

    在选择存储库名称和分支后,将出现一条消息,其中显示为该管道创建的 Amazon CloudWatch Events 规则。

    更改检测选项下面,保留默认值。这样,CodePipeline 就可以使用 Amazon CloudWatch Events 检测源存储库的更改。

    选择下一步

  9. 步骤 4:添加构建阶段中,选择跳过构建阶段,并通过再次选择跳过接受警告消息。选择下一步

    注意

    在本教程中,您将部署不需要生成服务的代码,因此您可以跳过此步骤。但是,如果您的源代码需要在部署到实例之前构建,则可以在此步骤中配置 CodeBuild

  10. 步骤 5:添加测试阶段中,选择跳过测试阶段,并通过再次选择跳过接受警告消息。

    选择下一步

  11. 步骤 6: 添加部署阶段部署提供程序中,选择 CodeDeploy。在应用程序名称中,选择 MyDemoApplication。在部署组中,选择 MyDemoDeploymentGroup,然后选择下一步

  12. 步骤 7:审核中,查看信息,然后选择创建管道

  13. 创建管道后它会开始运行。它会从 CodeCommit 存储库下载代码,并在 EC2 实例中创建 CodeDeploy 部署。在 CodePipeline 示例为 CodeDeploy 部署中的 Amazon EC2 实例部署网页时,您可以查看进度以及成功和失败消息。

    在 CodePipeline 控制台中开始运行的管道视图。

恭喜您!您刚刚在 CodePipeline 中创建了一个简单的管道。

接下来,您将验证结果。

验证您的管道是否成功运行
  1. 查看管道的初始进度。每个阶段的状态将从还没有任何执行变为正在进行,然后变为 成功失败。管道将在几分钟内完成首次运行。

  2. 在管道状态显示为成功后,在部署阶段的状态区域中,选择 CodeDeploy。此操作将打开 CodeDeploy 控制台。如果未显示成功,请参阅 CodePipeline 故障排除

  3. 部署选项卡上,选择部署 ID。在部署页面上的部署生命周期事件下,选择实例 ID。此操作将打开 EC2 控制台。

  4. 描述选项卡上的公有 DNS 中,复制地址(例如,ec2-192-0-2-1.us-west-2.compute.amazonaws.com),然后将其粘贴到 Web 浏览器的地址栏中。

    此网页将为您下载并推送到 CodeCommit 存储库的示例应用程序显示。

有关阶段和操作以及管道如何工作的更多信息,请参阅CodePipeline 概念

步骤 6:修改 CodeCommit 存储库中的代码

您的管道配置为每次对 CodeCommit 存储库中的代码进行更改时运行。在此步骤中,您将更改 CodeCommit 存储库中示例 CodeDeploy 应用程序中的 HTML 文件。当您推送这些更改时,您的管道会再次运行,并且您作出的更改将在您之前访问的网址中显示。

  1. 将目录更改为本地存储库:

    (For Linux, macOS, or Unix) cd /tmp/MyDemoRepo (For Windows) cd c:\temp\MyDemoRepo
  2. 使用文本编辑器修改 index.html 文件:

    (For Linux or Unix)gedit index.html (For OS X)open –e index.html (For Windows)notepad index.html
  3. 修订 index.html 文件的内容,以更改网页的背景颜色和一些文本,然后保存该文件。

    <!DOCTYPE html> <html> <head> <title>Updated Sample Deployment</title> <style> body { color: #000000; background-color: #CCFFCC; font-family: Arial, sans-serif; font-size:14px; } h1 { font-size: 250%; font-weight: normal; margin-bottom: 0; } h2 { font-size: 175%; font-weight: normal; margin-bottom: 0; } </style> </head> <body> <div align="center"><h1>Updated Sample Deployment</h1></div> <div align="center"><h2>This application was updated using CodePipeline, CodeCommit, and CodeDeploy.</h2></div> <div align="center"> <p>Learn more:</p> <p><a href="https://docs.aws.amazon.com/codepipeline/latest/userguide/">CodePipeline User Guide</a></p> <p><a href="https://docs.aws.amazon.com/codecommit/latest/userguide/">CodeCommit User Guide</a></p> <p><a href="https://docs.aws.amazon.com/codedeploy/latest/userguide/">CodeDeploy User Guide</a></p> </div> </body> </html>
  4. 通过一次运行以下一条命令的方式,将更改提交并推送到 CodeCommit 存储库中。

    git commit -am "Updated sample application files"
    git push
验证您的管道是否已成功运行
  1. 查看管道的初始进度。每个阶段的状态将从还没有任何执行变为正在进行,然后变为 成功失败。管道应在几分钟内完成运行。

  2. 操作状态显示成功之后,请刷新您之前在浏览器中访问的演示页面。

    此时将显示更新后的网页。

步骤 7:清理资源

您可以将在本教程中创建的一些资源用于本指南中的其他教程。例如,您可以重用 CodeDeploy 应用程序和部署。但是,在完成本教程和任何其他教程之后,您应该删除管道及其使用的资源,以避免为继续使用这些资源付费。首先删除管道,然后删除 CodeDeploy 应用程序及其关联的 Amazon EC2 实例,最后删除 CodeCommit 存储库。

清理本教程中使用的资源
  1. 要清理您的 CodePipeline 资源,请按照删除 Amazon CodePipeline 中的管道中的说明进行操作。

  2. 要清理 CodeDeploy 资源,请遵循清理部署演练资源中的说明进行操作。

  3. 要删除 CodeCommit 存储库,请遵循删除 CodeCommit 存储库中的说明进行操作。

步骤 8:延伸阅读

详细了解 CodePipeline 的工作原理: