

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

# 教學課程：建立以運算 (V2 類型） 執行命令的管道
<a name="tutorials-commands"></a>

在本教學課程中，您會設定管道，在建置階段中使用 Commands 動作持續執行提供的建置命令。如需 命令動作的詳細資訊，請參閱 [命令動作參考](action-reference-Commands.md)。

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

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

您必須已擁有下列各項目：
+ GitHub 儲存庫。您可以使用您在 中建立的 GitHub 儲存庫[教學課程：搭配 GitHub 管道來源使用完整複製](tutorials-github-gitclone.md)。

## 步驟 1：建立來源檔案並推送到您的 GitHub 儲存庫
<a name="tutorials-commands-push"></a>

在本節中，您會建立範例來源檔案，並將其推送至管道用於來源階段的儲存庫。在此範例中，您會產生並推送下列項目：
+ `README.txt` 檔案。

**建立來源檔案**

1. 使用下列文字建立檔案：

   ```
   Sample readme file
   ```

1. 儲存檔案為 `README.txt`。

**將檔案推送到您的 GitHub 儲存庫**

1. 將檔案推送或上傳至 儲存庫。這些檔案是 **Create Pipeline (建立管道)** 精靈針對 AWS CodePipeline中的部署動作所建立的來源成品。在本機目錄中，您的檔案應該如下所示：

   ```
   README.txt
   ```

1. 若要在您的本機電腦上從複製的儲存庫中使用 Git 命令列：

   1. 請執行下列命令來同時將所有檔案放入階段：

      ```
      git add -A
      ```

   1. 執行下列命令，使用遞交訊息遞交檔案。

      ```
      git commit -m "Added source files"
      ```

   1. 執行下列命令來從本機儲存庫推送檔案到您的 ​ 儲存庫：

      ```
      git push
      ```

## 步驟 2：建立管道
<a name="tutorials-commands-pipeline"></a>

在本節中，您可以採取下列動作建立管道：
+ 儲存來源檔案的儲存庫具有 GitHub （透過 GitHub 應用程式） 動作的來源階段。
+ 具有 Commands 動作的建置階段。

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

1. 登入 AWS 管理主控台 並開啟 CodePipeline 主控台，網址為 https：//[http://console.aws.amazon.com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home)。

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

1. 在**步驟 1：選擇建立選項**頁面的**建立選項**下，選擇**建置自訂管道**選項。選擇**下一步**。

1. 在**步驟 2：選擇管道設定**中，在**管道名稱**中輸入 **MyCommandsPipeline**。

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 中建立服務角色。
**注意**  
如果您使用現有的服務角色，若要使用 命令動作，您需要為服務角色新增下列許可。使用服務角色政策陳述式中的資源型許可，將許可範圍縮小到管道資源層級。如需詳細資訊，請參閱 中的政策範例[服務角色政策許可](action-reference-Commands.md#action-reference-Commands-policy)。  
logs:CreateLogGroup
logs:CreateLogStream
logs:PutLogEvents

1. 將 **Advanced settings (進階設定)** 下的設定保留為預設值，然後選擇 **Next (下一步)**。

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

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

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

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

   1. 在**預設分支**中，選擇您希望在管道手動啟動時或來源事件不是 Git 標籤時指定的分支。如果變更的來源不是觸發條件，或者是手動啟動管道執行，則所使用的變更將是來自預設分支的 HEAD 遞交。或者，您也可以使用篩選來指定 Webhook （觸發器）。如需詳細資訊，請參閱[使用觸發和篩選來自動化啟動管道](pipelines-triggers.md)。

   選擇**下一步**。

1. 在**步驟 4：新增建置階段**中，選擇**命令**。
**注意**  
執行 Commands 動作會在 中產生個別費用 AWS CodeBuild。

   輸入下列命令：

   ```
   ls
   echo hello world
   cat README.txt
   echo pipeline Execution Id is #{codepipeline.PipelineExecutionId}
   ```

   選擇**下一步**。  
![\[步驟 4：使用 Commands 動作新增新管道的建置階段頁面\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/commands-wizard-screen.png)

1. 在**步驟 5：新增測試階段**中，選擇**略過測試階段**，然後再次選擇**略過**以接受警告訊息。

   選擇**下一步**。

1. 在**步驟 6：新增部署階段**中，選擇**略過部署階段**，然後再次選擇**略過**以接受警告訊息。

   選擇**下一步**。

1. 在**步驟 7：檢閱**中，檢閱資訊，然後選擇**建立管道**。

1. 建立動作的最後一步是將環境變數新增至動作，這會導致動作的輸出變數。在命令動作上，選擇**編輯**。在**編輯**畫面上，透過`compute`在變數命名空間欄位中輸入 ，為您的動作指定**變數命名空間**。

   新增 CodeBuild 輸出變數 `AWS_Default_Region`，然後選擇**新增變數**。  
![\[命令動作的編輯頁面\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/commands-output-edit-var.png)

## 步驟 3：執行管道並驗證建置命令
<a name="tutorials-commands-update"></a>

釋出變更以執行您的管道。透過檢視執行歷史記錄、建置日誌和輸出變數來驗證建置命令是否執行。

**檢視動作日誌和輸出變數**

1. 管道成功執行後，您可以檢視 動作的日誌和輸出。

1. 若要檢視動作的輸出變數，請選擇**歷史記錄**，然後選擇**時間軸**。

   檢視新增至動作的輸出變數。Commands 動作的輸出會顯示解析至動作區域的輸出變數。  
![\[命令動作的輸出，顯示已解析至動作區域的輸出變數\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/commands-output-variable.png)

1. 若要檢視動作的日誌，請選擇**檢視成功命令動作**的詳細資訊。檢視 Commands 動作的日誌。  
![\[Commands 動作的範例日誌\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/commands-output-logs.png)