

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 教學課程：搭配 CodeCommit 管道來源使用完整複製
<a name="tutorials-codecommit-gitclone"></a>

您可以在 CodePipeline 中選擇 CodeCommit 來源動作的完整複製選項。 CodePipeline 使用此選項可讓 CodeBuild 存取管道建置動作中的 Git 中繼資料。

在本教學課程中，您會建立管道來存取 CodeCommit 儲存庫、使用完整複製選項進行來源資料，以及執行 CodeBuild 組建來複製您的儲存庫，並為儲存庫執行 Git 命令。

**注意**  
CodeBuild 動作是唯一下游動作支援使用 Git 複製選項提供的 Git 中繼資料。此外，雖然您的管道可以包含跨帳戶動作，但 CodeCommit 動作和 CodeBuild 動作必須位於相同的帳戶中，完整複製選項才能成功。

**重要**  
在建立管道的過程中，CodePipeline 將使用客戶提供的 S3 成品儲存貯體來製作成品。（這與用於 S3 來源動作的 儲存貯體不同。) 如果 S3 成品儲存貯體位於與管道帳戶不同的帳戶中，請確定 S3 成品儲存貯體由 所擁有 AWS 帳戶 ，安全且可靠。

**Topics**
+ [先決條件](#tutorials-codecommit-gitclone-prereq)
+ [步驟 1：建立 README 檔案](#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：建立 README 檔案
<a name="tutorials-codecommit-gitclone-file"></a>

使用這些步驟將 README 檔案新增至您的來源儲存庫。README 檔案提供範例來源檔案，供 CodeBuild 下游動作讀取。

**新增 README 檔案**

1. 登入您的儲存庫，然後選擇您的儲存庫。

1. 若要建立新檔案，請選擇**新增檔案 > 建立檔案**。命名檔案 `README.md`. 檔案並新增下列文字。

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

1. 選擇 **Commit changes (遞交變更)**。

   確定 `README.md` 檔案位於儲存庫的根層級。

## 步驟 2：建立管道和建置專案
<a name="tutorials-codecommit-gitclone-pipeline"></a>

在本節中，您可以採取下列動作建立管道：
+ 具有 CodeCommit 來源動作的來源階段。
+ 具有建置動作的 AWS CodeBuild 建置階段。

**使用精靈建立管道**

1. 前往 [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/) 登入 CodePipeline 主控台。

1. 在 **Welcome (歡迎)** 頁面、**Getting started (入門)** 頁面、或者 **Pipelines (管道)** 頁面上，選擇 **Create pipeline (建立管道)**。

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. 在 **Service role (服務角色)** 中，執行下列其中一項作業：
   + 選擇 **Existing service role (現有服務角色)**。
   + 選擇您現有的 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. 在 **Build provider (建置供應商)** 中，選擇 **AWS CodeBuild**。允許 **Region (區域)** 預設為管道區域。

   1. 選擇**建立專案**。

   1. 在 **Project name (專案名稱)** 中，輸入此建置專案的名稱。

   1. 在 **Environment image (環境映像)** 中，選擇 **Managed image (受管映像)**。針對 **Operating system (作業系統)**，選擇 **Ubuntu**。

   1. 針對 **Runtime (執行時間)**，選擇 **Standard (標準)**。針對**映像**，選擇 **aws/codebuild/standard:5.0**。

   1. 對於 **Service role (服務角色)**，選擇 **New service role (新服務角色)**。
**注意**  
請記下 CodeBuild 服務角色的名稱。在本教學課程中，您將需要最後一個步驟的角色名稱。

   1. 在 **BuildSpec** 底下，針對 **Build specifications (建置規格)** 選擇 **Insert build commands (插入建置命令)**。選擇**切換到編輯器**，然後在**建置命令**下貼上下列程式碼。

      ```
      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. 選擇 **Continue to CodePipeline (繼續 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`。