

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

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

您可以在 CodePipeline 中選擇 GitHub 來源動作的完整複製選項。使用此選項在管道建置動作中執行 Git 中繼資料的 CodeBuild 命令。

**注意**  
此處描述的完整複製選項是指指定 CodePipeline 是否應該複製儲存庫中繼資料，這只能由 CodeBuild 命令使用。若要使用 GitHub [使用者存取權杖](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app)搭配 CodeBuild 專案使用，請依照此處的步驟安裝 AWS Connector for GitHub 應用程式，然後將應用程式安裝欄位保留空白。CodeConnections 將使用使用者存取字符進行連線。



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

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

**注意**  
此功能不適用於亞太區域 （香港）、非洲 （開普敦）、中東 （巴林）、歐洲 （蘇黎世） 或 AWS GovCloud （美國西部） 區域。若要參考其他可用的動作，請參閱 [與 CodePipeline 的產品和服務整合](integrations.md)。如需歐洲 （米蘭） 區域中此動作的考量，請參閱 中的備註[適用於 Bitbucket Cloud、GitHub、GitHub Enterprise Server、GitLab.com, 和 GitLab 自我管理動作的 CodeStarSourceConnection](action-reference-CodestarConnectionSource.md)。

**Topics**
+ [

## 先決條件
](#tutorials-github-gitclone-prereq)
+ [

## 步驟 1：建立 README 檔案
](#tutorials-github-gitclone-file)
+ [

## 步驟 2：建立管道和建置專案
](#tutorials-github-gitclone-pipeline)
+ [

## 步驟 3：更新 CodeBuild 服務角色政策以使用連線
](#tutorials-github-gitclone-rolepolicy)
+ [

## 步驟 4：檢視建置輸出中的儲存庫命令
](#tutorials-github-gitclone-view)

## 先決條件
<a name="tutorials-github-gitclone-prereq"></a>

開始之前，您必須執行以下作業：
+ 使用 GitHub 帳戶建立 GitHub 儲存庫。
+ 準備好您的 GitHub 登入資料。當您使用 AWS 管理主控台 設定連線時，系統會要求您使用 GitHub 登入資料登入。

## 步驟 1：建立 README 檔案
<a name="tutorials-github-gitclone-file"></a>

建立 GitHub 儲存庫之後，請使用下列步驟來新增 README 檔案。

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

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

   ```
   This is a GitHub repository!
   ```

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

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

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

在本節中，您可以採取下列動作建立管道：
+ 與 GitHub 儲存庫和動作連線的來源階段。
+ 具有建置動作的 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：選擇管道設定**中，在**管道名稱**中輸入 **MyGitHubPipeline**。

1. 在**管道類型**中，針對本教學課程的目的選擇 **V1**。您也可以選擇 **V2**；不過請注意，管道類型在特性和價格方面有所不同。如需詳細資訊，請參閱[管道類型](pipeline-types.md)。

1. 在 **Service role (服務角色)** 中，選擇 **New service role (新服務角色)**。
**注意**  
如果您選擇改用現有的 CodePipeline 服務角色，請確定您已將 `codestar-connections:UseConnection` IAM 許可新增至您的服務角色政策。如需 CodePipeline 服務角色的說明，請參閱[為 CodePipeline 服務角色新增許可](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-iam.html#how-to-update-role-new-services)。

1. 在**進階設定**底下，請保留預設值。在**Artifact store (成品存放區)** 中，針對您為管道所選取區域中的管道，選擇 **Default location (預設位置)**，即可使用預設成品存放區 (例如指定為預設值的 ​Amazon S3 成品儲存貯體)。
**注意**  
這不是原始碼的來源儲存貯體。這是管道的成品存放區。每個管道都需要有個別成品存放區，例如 S3 儲存貯體。

   選擇**下一步**。

1. 在**步驟 3：新增來源階段**頁面上，新增來源階段：

   1. 在**來源提供者**中，選擇 **GitHub （透過 GitHub 應用程式）**。

   1. 在**連線**下，選擇現有的連線或建立新的連線。若要建立或管理 GitHub 來源動作的連線，請參閱 [GitHub 連線](connections-github.md)。

      您可以為您連至特定供應商的所有連線安裝一個應用程式。如果您已安裝 AWS Connector for GitHub 應用程式，請選擇它並略過此步驟。
**注意**  
如果您想要建立[使用者存取權杖](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app)，請確定您已安裝 AWS Connector for GitHub 應用程式，然後將應用程式安裝欄位保留空白。CodeConnections 將使用使用者存取字符進行連線。如需詳細資訊，請參閱 [ CodeBuild 中的存取您的來源提供者](https://docs.aws.amazon.com/codebuild/latest/userguide/access-tokens.html)。

   1. 在**儲存庫名稱**中，選擇 GitHub 儲存庫的名稱。

   1. 在**分支名稱**中，選擇您要使用的儲存庫分支。

   1. 請確認已選取**在原始程式碼變更時啟動管道**選項。

   1. 在**輸出成品格式**下，選擇**完整複製**以啟用來源儲存庫的 Git 複製選項。只有 CodeBuild 提供的動作才能使用 Git 複製選項。在本教學[步驟 3：更新 CodeBuild 服務角色政策以使用連線](#tutorials-github-gitclone-rolepolicy)課程中，您將使用 來更新 CodeBuild 專案服務角色的許可，以使用此選項。

   選擇**下一步**。

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 (插入建置命令)**。選擇**切換到編輯器**，並在**建置命令**下貼上以下內容。
**注意**  
在建置規格的 `env`區段中，請確定 git 命令的登入資料協助程式已啟用，如本範例所示。

      ```
      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 archive --format=zip HEAD > application.zip
        #post_build:
          #commands:
            # - command
            # - command
      artifacts:
        files:
          - application.zip
          # - 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-github-gitclone-rolepolicy"></a>

初始管道執行會失敗，因為 CodeBuild 服務角色必須更新為具有使用連線的許可。將 `codestar-connections:UseConnection` IAM 許可新增至您的服務角色政策。如需在 IAM 主控台中更新政策的說明，請參閱 [新增連線至 Bitbucket、GitHub、GitHub Enterprise Server 或 GitLab.com 的 CodeBuild GitClone 許可 GitLab.com](troubleshooting.md#codebuild-role-connections)。

## 步驟 4：檢視建置輸出中的儲存庫命令
<a name="tutorials-github-gitclone-view"></a>

1. 當您的服務角色成功更新時，請在失敗的 CodeBuild 階段選擇**重試**。

1. 管道成功執行後，在您成功的建置階段，選擇**檢視詳細資訊**。

   在詳細資訊頁面上，選擇**日誌**索引標籤。檢視 CodeBuild 組建輸出。命令會輸出輸入變數的值。

   命令會輸出`README.md`檔案內容、列出 目錄中的檔案、複製儲存庫、檢視日誌，並將儲存庫封存為 ZIP 檔案。