

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 教程：创建简单的管道（CodeCommit 存储库）
<a name="tutorials-simple-codecommit"></a>

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

**重要**  
作为创建管道的一部分，客户提供的 S3 工件存储桶将 CodePipeline 用于项目。（这与用于 S3 源操作的存储桶不同。） 如果 S3 工件存储桶与您的管道账户位于不同的账户中，请确保 S3 工件存储桶归其所有 AWS 账户 ，该存储桶是安全且可靠的。

管道具有两个阶段：
+ 源操作的**源**阶段（ CodeCommit 来源）。
+ 您的部署操作的**部署**阶段（ CodeDeploy 部署）。

最简单的入门方法 AWS CodePipeline 是在 CodePipeline 控制台中使用**创建管道**向导。

**注意**  
在开始之前，请确保已设置好要使用的 Git 客户端 CodeCommit。有关说明，请参阅 [ CodeCommit 设置](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up.html)。

## 步骤 1：创建 CodeCommit 存储库
<a name="codecommit-create-repository"></a>

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

**创建存储 CodeCommit 库**



1. 打开 CodeCommit 控制台，网址为[https://console.aws.amazon.com/codecommit/](https://console.aws.amazon.com/codecommit/)。

1. 在区域选择器中，选择要创建存储库和管道 AWS 区域 的位置。有关更多信息，请参阅[AWS 区域 和端点](https://docs.aws.amazon.com/general/latest/gr/rande.html)。

1. 在**存储库**页面上，选择**创建存储库**。

1. 在**创建存储库**页面上的**存储库名称**中，输入存储库的名称（例如，**MyDemoRepo**）。

1. 选择**创建**。

**注意**  
本教程的其余步骤将使用**MyDemoRepo**存储 CodeCommit 库的名称。如果您选择其他名称，请确保在本教程中通篇使用它。

**设置本地存储库**

在此步骤中，设置一个本地存储库，连接到您的远程 CodeCommit 存储库。
**注意**  
您无需设置本地存储库。还可以使用此控制台上传文件（如[第 2 步：向 CodeCommit 存储库中添加示例代码](#codecommit-add-code)所述）。

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

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

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

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

## 第 2 步：向 CodeCommit 存储库中添加示例代码
<a name="codecommit-add-code"></a>

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



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

   1. 选择下列选项之一。如果要对 Linux 实例执行本教程中的步骤，请选择 `SampleApp_Linux.zip`。
      + 如果您想使用部署到亚马逊 Linux 实例 CodeDeploy，请在此处下载示例应用程序：[SampleApp\$1Linux.zip](samples/SampleApp_Linux.zip)。
      + 如果你想使用部署到 Windows 服务器实例 CodeDeploy，请在此处下载示例应用程序：[SampleApp\$1Windows.zip](samples/SampleApp_Windows.zip)。

      示例应用程序包含以下用于部署的文件 CodeDeploy：
      + `appspec.yml`— 应用程序规范文件（AppSpec文件）是一个 [YAML](http://www.yaml.org) 格式的文件， CodeDeploy 用于管理部署。有关该 AppSpec 文件的更多信息，请参阅*AWS CodeDeploy 用户指南*中的[CodeDeploy AppSpec 文件参考](https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file.html)。
      + `index.html` - 索引文件包含已部署的示例应用程序的主页。
      + `LICENSE.txt` - 许可证文件包含示例应用程序的许可证信息。
      + 脚本文件 - 示例应用程序使用脚本将文本文件写入实例上的某个位置。为多个 CodeDeploy 部署生命周期事件分别写入一个文件，如下所示：
        + （仅限 Linux 示例）`scripts` 文件夹 - 该文件夹包含以下 shell 脚本，用于安装依赖项以及启动和停止自动部署的示例应用程序：`install_dependencies`、`start_server` 和 `stop_server`。
        + （仅限 Windows 示例）`before-install.bat` - 此批处理脚本用于 `BeforeInstall` 部署生命周期事件，它将运行以删除此示例在先前部署中写入的旧文件，并在您的实例上创建一个位置用于写入新文件。

   1. 下载压缩（zipped）文件。

1. 将文件从 [SampleApp\$1Linux.zip](samples/SampleApp_Linux.zip) 解压缩到之前创建的本地目录（例如，`/tmp/MyDemoRepo`或`c:\temp\MyDemoRepo`）。

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

   ```
   /tmp
      └-- MyDemoRepo
          │-- appspec.yml
          │-- index.html
          │-- LICENSE.txt
          └-- scripts
              │-- install_dependencies
              │-- start_server
              └-- stop_server
   ```

1. 要将文件上传到您的存储库，请使用以下方法之一。

   1. 要使用 CodeCommit 控制台上传文件，请执行以下操作：

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

      1. 选择**添加文件**，然后选择**上传文件**。

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

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

         选择**提交更改**。

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

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

         ```
                │-- appspec.yml
                │-- index.html
                │-- LICENSE.txt
                └-- scripts
                    │-- install_dependencies
                    │-- start_server
                    └-- stop_server
         ```

   1. 使用 git 命令上传文件：

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

         ```
         (For Linux, macOS, or Unix) cd /tmp/MyDemoRepo
         (For Windows) cd c:\temp\MyDemoRepo
         ```

      1. 运行以下命令以立即暂存您的所有文件：

         ```
         git add -A
         ```

      1. 运行以下命令以提交带有提交消息的文件：

         ```
         git commit -m "Add sample application files"
         ```

      1. 运行以下命令以将文件从您的本地存储库推送到您的 CodeCommit 存储库：

         ```
         git push
         ```

1. 您下载并添加到本地存储库中的文件现已添加到 CodeCommit `MyDemoRepo`存储库的`main`分支中，可以包含在管道中。

## 步骤 3：创建 Amazon EC2 Linux 实例并安装 CodeDeploy 代理
<a name="codecommit-create-deployment"></a>

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

**创建实例角色**

1. 打开 IAM 控制台，网址为 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))。

1. 在控制台控制面板中，选择**角色**。

1. 选择**创建角色**。

1. 在**选择受信任实体的类型**下，选择 **AWS 服务**。在**选择使用案例**下，选择 **EC2**。在**选择您的使用案例**下，选择 **EC2**。选择**下一步：权限**。

1. 搜索名为 **`AmazonEC2RoleforAWSCodeDeploy`** 的策略并将其选中。

1. 搜索名为 **`AmazonSSMManagedInstanceCore`** 的策略并将其选中。选择**下一步：标签**。

1. 选择**下一步：审核**。输入角色的名称（例如 **EC2InstanceRole**）。
**注意**  
记下您的角色名称以便在下一步中使用。在创建实例时选择此角色。

   选择**创建角色**。

**启动实例**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在侧面导航栏中，选择**实例**，然后从页面顶部选择**启动实例**。

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

1. 在 “**应用程序和操作系统映像（亚马逊系统映像）**” 下，找到带有 AWS 徽标的 **Amazon Linux** AMI 选项，并确保将其选中。（此 AMI 称为 Amazon Linux 2 AMI (HVM)，并标记为“符合免费套餐条件”。）

1. 在**实例类型**下，选择符合免费套餐条件的 `t2.micro` 类型作为实例的硬件配置。

1. 在**密钥对(登录)** 下，选择或创建密钥对。

   也可以选择**继续操作但不提供密钥对**。
**注意**  
在本教程中，您可以继续操作而不提供密钥对。要使用 SSH 连接到实例，请创建或使用密钥对。

1. 在**网络设置**下，执行以下操作：

   在**自动分配公有 IP** 中，确保状态为**启用**。

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

1. 展开**高级详细信息**。在 **IAM 实例配置文件**中，选择您在上一过程中创建的 IAM 角色（例如 **EC2InstanceRole**）。

1. 在**摘要**下的**实例数**下，输入 `1`。

1. 选择**启动实例**。

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

## 步骤 4：在中创建应用程序 CodeDeploy
<a name="codecommit-create-codedeploy-app"></a>

在中 CodeDeploy，[https://docs.aws.amazon.com/codedeploy/latest/userguide/applications.html](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications.html)是一种包含要部署的软件应用程序的资源。稍后，您将此应用程序与配合使用 CodePipeline ，自动将示例应用程序部署到您的 Amazon EC2 实例。

首先，创建一个允许执行部署 CodeDeploy 的角色。然后，您将创建一个 CodeDeploy 应用程序。

**创建 CodeDeploy 服务角色**

1. 打开 IAM 控制台，网址为 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))。

1. 在控制台控制面板中，选择**角色**。

1. 选择**创建角色**。

1. 在**选择受信任实体**下，选择 **AWS 服务**。在 **Use case**（使用案例）下，选择 **CodeDeploy**。**CodeDeploy**从列出的选项中进行选择。选择**下一步**。`AWSCodeDeployRole` 托管策略已附加到角色。

1. 选择**下一步**。

1. 输入角色的名称（例如 **CodeDeployRole**），然后选择**创建角色**。

**要在中创建应用程序 CodeDeploy**

1. 在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。

1. 如果未显示**应用程序**页面，请在菜单上选择**应用程序**。

1. 选择**创建应用程序**。

1. 在**应用程序名称**中，输入 **MyDemoApplication**。

1. 在 **Compute Platform（计算平台）**中，选择 **EC2/On-premises（EC2/本地）**。

1. 选择**创建应用程序**。

**要在中创建部署组 CodeDeploy**

[https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-groups.html](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-groups.html)是定义了部署相关设置（例如，要部署到哪些实例以及部署它们的速度有多快）的资源。

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

1. 在 **Deployment group name（部署组名称）**中，输入 **MyDemoDeploymentGroup**。

1. 在**服务角色**中，选择您之前创建的服务角色的 ARN（例如，**`arn:aws:iam::account_ID:role/CodeDeployRole`**）。

1. 在**部署类型**下，选择**就地**。

1. 在**环境配置**下，选择 **Amazon EC2 实例**。在**键**字段中，输入 **Name**。在**值**字段中，输入您用于标记实例的名称（例如，**MyCodePipelineDemo**）。

1. 在 “使用 S ** AWS ystems Manager 配置代理**” 下，选择 “**立即并安排更新**”。这将在实例上安装代理。Linux 实例已经配置了 SSM 代理，现在将使用 CodeDeploy 代理进行更新。

1. 在**部署配置**中，选择 `CodeDeployDefault.OneAtaTime`。

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

1. 选择 **Create deployment group（创建部署组）**。

## 第 5 步：在中创建您的第一个管道 CodePipeline
<a name="codecommit-create-pipeline"></a>

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

**创建 CodePipeline 管道**

1. 登录 AWS 管理控制台 并打开 CodePipeline 控制台，[网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home)。

   打开 CodePipeline 控制台，网址为[https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/)。

1. 在**欢迎**页面、**入门**页面或**管道**页面上，选择**创建管道**。

1. 在**步骤 1：选择创建选项**页面上的**创建选项**下，选择**构建自定义管道**选项。选择**下一步**。

1. 在**步骤 2：选择管道设置**的**管道名称**中，输入 **MyFirstPipeline**。

1. CodePipeline 提供 V1 和 V2 类型的管道，它们的特性和价格各不相同。在控制台中，您只能选择 V2 类型。有关更多信息，请参阅[管道类型](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel)。有关定价的信息 CodePipeline，请参阅[定价](https://aws.amazon.com/codepipeline/pricing/)。

1. 在**服务角色**中，选择**新建服务角色** CodePipeline 以允许在 IAM 中创建服务角色。

1. 将**高级设置**中的各项设置保留为默认值，然后选择**下一步**。

1. 在**步骤 3：添加源阶段**的**源提供程序**中，选择 **CodeCommit**。在**存储库名称**中，选择您在中创建的 CodeCommit 存储库的名称[步骤 1：创建 CodeCommit 存储库](#codecommit-create-repository)。在**分支名称**中，选择 `main`，然后选择**下一步**。

   选择存储库名称和分支后，将显示一条消息，显示要为此管道创建的 Amazon Ev CloudWatch ents 规则。

   在**更改检测选项**下面，保留默认值。这 CodePipeline 允许使用 Amazon E CloudWatch vents 来检测源存储库中的更改。

   选择**下一步**。

1. 在**步骤 4：添加构建阶段**中，选择**跳过构建阶段**，并通过再次选择**跳过**接受警告消息。选择**下一步**。
**注意**  
在本教程中，您将部署不需要生成服务的代码，因此您可以跳过此步骤。但是，如果您的源代码需要在部署到实例之前构建，则可以在此步骤中配置 [CodeBuild](https://aws.amazon.com/codebuild/)。

1. 在**步骤 5：添加测试阶段**中，选择**跳过测试阶段**，并通过再次选择**跳过**接受警告消息。

   选择**下一步**。

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

1. 在**步骤 7：查看**中，查看信息，然后选择**创建管道**。

1. 创建管道后它会开始运行。它会从您的 CodeCommit存储库下载代码并创建到您的 EC2 实例的 CodeDeploy 部署。当 CodePipeline 示例将网页部署到部署中的 Amazon EC2 实例时，您可以查看进度以及成功和失败消息。 CodeDeploy   
![\[CodePipeline 控制台中开始运行的管道视图。\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/codepipeline-firstpipeline-codecommit-pol.png)

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

接下来，您将验证结果。

**验证您的管道是否成功运行**

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

1. 在管道状态显示**成功**后，在 “部**署**” 阶段的状态区域中选择**CodeDeploy**。这将打开 CodeDeploy 控制台。如果未显示**成功**，请参阅 [故障排除 CodePipeline](troubleshooting.md)。

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

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

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

有关阶段和操作以及管道如何工作的更多信息，请参阅[CodePipeline 概念 ](concepts.md)。

## 第 6 步：修改 CodeCommit 仓库中的代码
<a name="codecommit-push-code"></a>

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

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

   ```
   (For Linux, macOS, or Unix) cd /tmp/MyDemoRepo
   (For Windows) cd c:\temp\MyDemoRepo
   ```

1. 使用文本编辑器修改 `index.html` 文件：

   ```
   (For Linux or Unix)gedit index.html
   (For OS X)open –e index.html
   (For Windows)notepad index.html
   ```

1. 修订 `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>
   ```

1. 通过运行以下命令逐一提交更改并将其推送到 CodeCommit 存储库：

   ```
   git commit -am "Updated sample application files"
   ```

   ```
   git push
   ```

**验证您的管道是否已成功运行**

1. 查看管道的初始进度。每个阶段的状态将从**还没有任何执行**变为**正在进行**，然后变为 **成功**或**失败**。管道应在几分钟内完成运行。

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

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

## 步骤 7：清理资源
<a name="codecommit-clean-up"></a>

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

**清理本教程中使用的资源**

1. 要清理您的 CodePipeline 资源，请按照中[删除管道中的](pipelines-delete.md)说明进行操作 AWS CodePipeline。

1. 要清理 CodeDeploy 资源，请按照[清理部署演练资源中的说明进行](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-simple-s3alkthrough.html#tutorials-simple-s3alkthrough-clean-up)操作。

1. 要删除 CodeCommit 存储库，请按照[删除存储 CodeCommit库](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-delete-repository.html)中的说明进行操作。

## 步骤 8：延伸阅读
<a name="codecommit-optional-tasks"></a>

详细了解 CodePipeline 工作原理：
+ 有关阶段和操作以及管道如何工作的更多信息，请参阅[CodePipeline 概念 ](concepts.md)。
+ 有关您可以使用执行的操作的信息 CodePipeline，请参阅[与动 CodePipeline 作类型的集成](integrations-action-type.md)。
+ 试用这个更高级的教程：[教程：创建一个四阶段管道](tutorials-four-stage-pipeline.md)。它创建一个多阶段管道，包括一个在部署之前构建代码的步骤。