

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

# 教程：使用带有 CodeCommit 管道源的完整克隆
<a name="tutorials-codecommit-gitclone"></a>

您可以在中为 CodeCommit 源操作选择完全克隆选项 CodePipeline。使用此选项 CodeBuild 允许在管道构建操作中访问 Git 元数据。

在本教程中，您将创建一个访问 CodeCommit 仓库的管道，对源数据使用完整克隆选项，并运行一个用于克隆仓库并对仓库执行 Git 命令的 CodeBuild 构建。

**注意**  
CodeBuild 操作是唯一支持使用 Git 克隆选项提供的 Git 元数据的下游操作。此外，虽然您的管道可以包含跨账户操作，但操作和 CodeBuild 操作必须位于同一个账户中，完整克隆选项才能成功。 CodeCommit

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

**Topics**
+ [先决条件](#tutorials-codecommit-gitclone-prereq)
+ [步骤 1：创建自述文件](#tutorials-codecommit-gitclone-file)
+ [步骤 2：创建管道并构建项目](#tutorials-codecommit-gitclone-pipeline)
+ [步骤 3：更新 CodeBuild 服务角色策略以克隆存储库](#tutorials-codecommit-gitclone-rolepolicy)
+ [步骤 4：在构建输出中查看存储库命令](#tutorials-codecommit-gitclone-view)

## 先决条件
<a name="tutorials-codecommit-gitclone-prereq"></a>

在开始之前，您必须在与您的管道相同的 AWS 账户和区域中创建 CodeCommit 存储库。

## 步骤 1：创建自述文件
<a name="tutorials-codecommit-gitclone-file"></a>

使用以下步骤将自述文件添加到您的源存储库。README 文件提供了供 CodeBuild 下游操作读取的示例源文件。

**添加自述文件**

1. 登录您的存储库并选择您的存储库。

1. 要创建新文件，请选择**添加文件 > 创建文件**。将文件命名为 `README.md` 文件并添加以下文本。

   ```
   This is a CodeCommit repository!
   ```

1. 选择**提交更改**。

   确保 `README.md` 文件位于存储库的根级别。

## 步骤 2：创建管道并构建项目
<a name="tutorials-codecommit-gitclone-pipeline"></a>

在此部分中，您将使用以下操作创建管道：
+ 带有源操作的 CodeCommit 源舞台。
+ 带有生成操作的 AWS CodeBuild 生成阶段。

**使用向导创建管道**

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

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

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

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

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 服务角色。在服务角色策略中，该角色必须有 `codecommit:GetRepository` IAM 权限。请参见[为 CodePipeline 服务角色添加权限](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-iam.html#how-to-update-role-new-services)。

1. 在**高级设置**下，保留原定设置值。选择**下一步**。

1. 在**步骤 3：添加源阶段**页面上，执行以下操作：

   1. 在**源提供程序**中，选择 **CodeCommit**。

   1. 在**存储库名称**中，选择存储库的名称。

   1. 在**分支名称**中，选择您的分支名称。

   1. 确保选择了**在源代码更改时启动管道**选项。

   1. 在**输出构件格式**下，选择**完整克隆**，对源存储库启用 Git 克隆选项。只有提供的操作 CodeBuild 才能使用 Git 克隆选项。

   选择**下一步**。

1. 在**步骤 4：添加构建阶段**中，执行以下操作：

   1. 在**构建提供程序**中，选择 **AWS CodeBuild**。允许**区域**默认为管道区域。

   1. 选择**创建项目**。

   1. 在**项目名称**中，输入此构建项目的名称。

   1. 在**环境映像**中，选择**托管映像**。对于**操作系统**，选择 **Ubuntu**。

   1. 对于**运行时**，选择**标准**。**对于 “**图像**”，选择:5.0 aws/codebuild/standard。**

   1. 对于**服务角色**，选择**新建服务角色**。
**注意**  
记下您的 CodeBuild 服务角色的名称。在本教程的最后一步，您会用到此角色名称。

   1. 在**构建规范**下，为**构建规范**选择**插入构建命令**。选择**切换到编辑器**，然后在**构建命令**下粘贴以下代码。

      ```
      version: 0.2
      
      env:
        git-credential-helper: yes
      phases:
        install:
          #If you use the Ubuntu standard image 2.0 or later, you must specify runtime-versions.
          #If you specify runtime-versions and use an image other than Ubuntu standard image 2.0, the build fails.
          runtime-versions:
            nodejs: 12
            # name: version
          #commands:
            # - command
            # - command
        pre_build:
          commands:
            - ls -lt
            - cat README.md
        build:
          commands:
            - git log | head -100
            - git status
            - ls
            - git describe --all
        #post_build:
          #commands:
            # - command
            # - command
      #artifacts:
        #files:
          # - location
        #name: $(date +%Y-%m-%d)
        #discard-paths: yes
        #base-directory: location
      #cache:
        #paths:
          # - paths
      ```

   1. 选择 “**继续” CodePipeline**。这将使您返回 CodePipeline 控制台并创建一个使用您的构建命令进行配置的 CodeBuild 项目。该构建项目使用服务角色来管理 AWS 服务 权限。此步骤可能需要几分钟时间。

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

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

   选择**下一步**。

1. 在 “**步骤 6：添加部署阶段**” 页上，选择 “**跳过部署阶段**”，然后再次选择 “**跳过**”，接受警告消息。选择**下一步**。

1. 在 “**步骤 7：查看**” 中，选择 “**创建管道**”。

## 步骤 3：更新 CodeBuild 服务角色策略以克隆存储库
<a name="tutorials-codecommit-gitclone-rolepolicy"></a>

初始管道运行将失败，因为您需要更新 CodeBuild 服务角色，使其具有从存储库中提取的权限。

在服务角色策略中添加 `codecommit:GitPull` IAM 权限。有关在 IAM 控制台中更新策略的说明，请参阅[为 CodeCommit 源操作添加 CodeBuild GitClone 权限](troubleshooting.md#codebuild-role-codecommitclone)。

## 步骤 4：在构建输出中查看存储库命令
<a name="tutorials-codecommit-gitclone-view"></a>

**查看构建输出**

1. 成功更新服务角色后，在失败 CodeBuild 阶段选择 “**重试**”。

1. 管道成功运行后，在成功的构建阶段上，选择**查看详细信息**。

   在详细信息页面上，选择**日志**选项卡。查看编 CodeBuild 译输出。这些命令将输出所输入变量的值。

   这些命令输出 `README.md` 文件内容，列出目录中的文件，克隆存储库，查看日志，然后运行 `git describe --all`。