

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

# 設定失敗階段或失敗動作的階段重試
<a name="stage-retry"></a>

您可以重試失敗的階段，而無需從頭開始再次執行管道。您可以透過在階段中重試失敗的動作，或從階段中的第一個動作開始重試階段中的所有動作來執行此操作。當您在階段中重試失敗的動作時，所有仍在進行的動作都會繼續運作，並再次觸發失敗的動作。當您從階段中的第一個動作重試失敗的階段時，該階段無法有任何進行中的動作。在可以重試階段之前，必須讓所有動作失敗或某些動作失敗，而且有些動作成功。

**重要**  
重試失敗的階段會從階段的第一個動作重試階段中的所有動作，而重試失敗的動作會重試階段中的所有失敗動作。這會覆寫相同執行中先前成功動作的輸出成品。  
雖然成品可能遭到覆寫，但先前成功動作的執行歷史記錄仍會保留。

如果您使用主控台檢視管道，**則重試階段**按鈕或**重試失敗動作**按鈕會顯示在可以重試的階段。

如果您使用 AWS CLI，您可以使用 **get-pipeline-state**命令來判斷是否有任何動作失敗。

**注意**  
在下列情況下，您可能無法重試階段：  
階段中的所有動作都成功，因此階段不會處於失敗狀態。
整體管道結構會在階段失敗後變更。
階段中的另一個重試正在處理中。

**Topics**
+ [階段重試的考量事項](#stage-retry-considerations)
+ [手動重試失敗的階段](#stage-retry-manual)
+ [設定自動重試失敗的階段](#stage-retry-auto)

## 階段重試的考量事項
<a name="stage-retry-considerations"></a>

階段重試的考量如下：
+ 您只能在階段失敗時設定自動重試一次重試嘗試。
+ 您可以為所有 動作設定階段失敗的自動重試，包括 `Source`動作。

## 手動重試失敗的階段
<a name="stage-retry-manual"></a>

您可以使用主控台或 CLI 手動重試失敗的階段。

您也可以設定在失敗時自動重試的階段，如 中所述[設定自動重試失敗的階段](#stage-retry-auto)。

### 手動重試失敗的階段 （主控台）
<a name="stage-retry-console"></a><a name="proc-stage-retry-console"></a>

**在階段 - 主控台中重試失敗的階段或失敗的動作**

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

   與 AWS 您的帳戶相關聯的所有管道名稱都會顯示。

1.  在 **Name (名稱)** 中，選擇管道的名稱。

1. 找出具有失敗動作的階段，然後選擇下列其中一項：
   + 若要重試階段中的所有動作，請選擇**重試階段**。
   + 若要在階段中僅重試失敗的動作，請選擇**重試失敗的動作**。  
![具有 CodeCommit 來源階段和失敗 CodeDeploy 部署階段的範例管道](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/retry-failed-stage.png)

   若階段中所有重試動作皆已成功完成，管道將持續執行。

### 手動重試失敗階段 (CLI)
<a name="stage-retry-cli"></a>

**若要在階段中重試失敗的階段或失敗的動作 - CLI**

若要使用 AWS CLI 重試所有動作或所有失敗的動作，您可以使用下列參數執行 **retry-stage-execution**命令：

```
--pipeline-name <value>
--stage-name <value>
--pipeline-execution-id <value>
--retry-mode ALL_ACTIONS/FAILED_ACTIONS
```
**注意**  
您可以用於 的值`retry-mode`為 `FAILED_ACTIONS`和 `ALL_ACTIONS`。

1. 在終端機 (Linux、macOS 或 Unix) 或命令提示字元 (Windows) 執行 [https://docs.aws.amazon.com/cli/latest/reference/codepipeline/get-pipeline-state.html](https://docs.aws.amazon.com/cli/latest/reference/codepipeline/get-pipeline-state.html) 命令，如下列名為 的管道範例所示`MyPipeline`。

   ```
   aws codepipeline retry-stage-execution --pipeline-name MyPipeline --stage-name Deploy --pipeline-execution-id b59babff-5f34-EXAMPLE --retry-mode FAILED_ACTIONS
   ```

   輸出會傳回執行 ID：

   ```
   {
       "pipelineExecutionId": "b59babff-5f34-EXAMPLE"
   }
   ```

1. 您也可以使用 JSON 輸入檔案來執行命令。首先您必須建立 JSON 檔案，此檔案指出管道、包含失敗動作的階段，以及該階段中最新的管道執行。接著使用 `--cli-input-json` 參數來執行 **retry-stage-execution**​ 命令。若要擷取 JSON 檔案所需的詳細資訊，使用 **get-pipeline-state** 命令是最簡單的方法。

   1. 在終端機 (Linux、macOS 或 Unix) 或命令提示字元 (Windows)，在管道上執行 [https://docs.aws.amazon.com/cli/latest/reference/codepipeline/get-pipeline-state.html](https://docs.aws.amazon.com/cli/latest/reference/codepipeline/get-pipeline-state.html)命令。例如，對於名為 MyFirstPipeline 的管道，您可以輸入類似如下的內容：

      ```
      aws codepipeline get-pipeline-state --name {{MyFirstPipeline}}
      ```

      對於命令的回應包括各階段的管道狀態資訊。在以下範例中，回應表示在預備 (Staging) 階段中失敗的一個或多個動作。

      ```
      {
          "updated": 1427245911.525,
          "created": 1427245911.525,
          "pipelineVersion": 1,
          "pipelineName": "MyFirstPipeline",
          "stageStates": [
              {
                  "actionStates": [...],
                  "stageName": "Source",
                  "latestExecution": {
                      "pipelineExecutionId": "9811f7cb-7cf7-SUCCESS",
                      "status": "Succeeded"
                  }
              },
              {{{
                  "actionStates": [...],
                  "stageName": "Staging",
                  "latestExecution": {
                      "pipelineExecutionId": "3137f7cb-7cf7-EXAMPLE",
                      "status": "Failed"
                  }}}
              }
          ]
      }
      ```

   1. 在純文字編輯器中，以 JSON 格式來建立您將用於記錄下列內容的檔案：
      + 包含失敗動作之管道的名稱
      + 包含失敗動作之階段的名稱
      + 該階段中最新管道執行的 ID
      + 重試模式。

      對於上述 MyFirstPipeline 範例，您的檔案看起來會像這樣：

      ```
      {
          "pipelineName": "MyFirstPipeline",
          "stageName": "Staging",
          "pipelineExecutionId": "3137f7cb-7cf7-EXAMPLE",
          "retryMode": "FAILED_ACTIONS"
      }
      ```

   1. 以類似 **retry-failed-actions.json** 的名稱儲存檔案。

   1. 呼叫您執行 [https://docs.aws.amazon.com/cli/latest/reference/codepipeline/retry-stage-execution.html](https://docs.aws.amazon.com/cli/latest/reference/codepipeline/retry-stage-execution.html) 命令時建立的檔案。例如：
**重要**  
請確認在檔案名稱之前包含 `file://`。這是此命令必要項目。

      ```
      aws codepipeline retry-stage-execution --cli-input-json file://retry-failed-actions.json
      ```

   1. 若要檢視重試嘗試的結果，請開啟 CodePipeline 主控台並選擇包含失敗動作的管道，或再次使用 **get-pipeline-state**命令。如需詳細資訊，請參閱[在 CodePipeline 中檢視管道和詳細資訊](pipelines-view.md)。

## 設定自動重試失敗的階段
<a name="stage-retry-auto"></a>

您可以設定階段以在失敗時自動重試。階段會進行一次重試嘗試，並在**檢視**管道頁面上的失敗階段顯示重試狀態。

您可以指定階段應自動重試失敗階段中的所有動作，或僅重試階段中失敗的動作，以設定重試模式。

### 設定自動重試失敗的階段 （主控台）
<a name="stage-retry-auto-console"></a>

您可以使用 主控台來設定自動重試的階段。

**設定自動重試的階段 （主控台）**

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

   與 AWS 您的帳戶相關聯的所有管道的名稱和狀態都會顯示。

1. 在 **Name (名稱)** 中，選擇您想編輯的管道名稱。

1. 在管道詳細資訊頁面上，選擇 **Edit (編輯)**。

1. 在**編輯**頁面上，針對您要編輯的動作，選擇**編輯階段**。

1. 選擇**自動階段組態：**，然後選擇在**階段失敗時啟用自動重試**。將變更儲存至您的管道。

1. 在**自動化階段組態中：**，選擇下列其中一個重試模式：
   + 若要指定 模式將重試階段中的所有動作，請選擇**重試失敗階段**。
   + 若要指定 模式只會重試階段中失敗的動作，請選擇**重試失敗的動作**。

   將變更儲存至您的管道。  
![在 CodePipeline 中設定階段失敗時自動重試的範例編輯畫面。](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/retry-configure.png)

1. 管道執行後，如果發生階段失敗，則會自動重試嘗試。下列範例顯示已自動重試的建置階段。  
![具有失敗階段且已重試一次的範例管道。](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/stage-auto-retry-example.png)

1. 若要檢視重試嘗試的詳細資訊，請選擇 。視窗隨即顯示。  
![重試階段中繼資料視窗的範例，顯示有一次嘗試。](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/retry-stage-metadata.png)

### 設定自動重試的階段 (CLI)
<a name="stage-retry-auto-cli"></a>

若要使用 AWS CLI 設定階段以在失敗時自動重試，請使用 命令來建立或更新管道，如 [建立管道、階段和動作](pipelines-create.md)和 中所述[在 CodePipeline 中編輯管道](pipelines-edit.md)。
+ 開啟終端機 (Linux、macOS 或 Unix) 或命令提示字元 AWS CLI (Windows)，然後使用 執行`update-pipeline`命令，在管道結構中指定失敗條件。下列範例會為名為 的階段設定自動重試`S3Deploy`：

  ```
  {
                  "name": "S3Deploy",
                  "actions": [
                      {
                          "name": "s3deployaction",
                          "actionTypeId": {
                              "category": "Deploy",
                              "owner": "AWS",
                              "provider": "S3",
                              "version": "1"
                          },
                          "runOrder": 1,
                          "configuration": {
                              "BucketName": "static-website-bucket",
                              "Extract": "false",
                              "ObjectKey": "SampleApp.zip"
                          },
                          "outputArtifacts": [],
                          "inputArtifacts": [
                              {
                                  "name": "SourceArtifact"
                              }
                          ],
                          "region": "us-east-1"
                      }
                  ],
                   "onFailure": {
                      "result": "RETRY",
                      "retryConfiguration": {
                          "retryMode": "ALL_ACTIONS",
                      },
              }
  ```

### 設定自動重試的階段 (CloudFormation)
<a name="stage-retry-auto-cfn"></a>

若要使用 CloudFormation 設定自動重試失敗的階段，請使用`OnFailure`階段生命週期參數。使用 `RetryConfiguration` 參數來設定重試模式。

```
OnFailure:
     Result: RETRY
     RetryConfiguration: 
         RetryMode: ALL_ACTIONS
```
+ 更新範本，如下列程式碼片段所示。下列範例會為名為 的階段設定自動重試`Release`：

  ```
  AppPipeline: 
    Type: AWS::CodePipeline::Pipeline 
    Properties: 
      RoleArn:
        Ref: CodePipelineServiceRole 
      Stages: 
        - 
          Name: Source 
          Actions: 
            - 
              Name: SourceAction
              ActionTypeId: 
                Category: Source 
                Owner: AWS 
                Version: 1 
                Provider: S3 
              OutputArtifacts: 
                - 
                  Name: SourceOutput 
              Configuration: 
                S3Bucket: 
                  Ref: SourceS3Bucket 
                S3ObjectKey: 
                  Ref: SourceS3ObjectKey 
              RunOrder: 1  
        - 
          Name: Release 
          Actions: 
            - 
              Name: ReleaseAction
              InputArtifacts: 
                - 
                  Name: SourceOutput 
              ActionTypeId: 
                Category: Deploy 
                Owner: AWS 
                Version: 1
                Provider: CodeDeploy 
              Configuration: 
                ApplicationName: 
                  Ref: ApplicationName
                DeploymentGroupName: 
                  Ref: DeploymentGroupName 
              RunOrder: 1   
         OnFailure:
             Result: RETRY
             RetryConfiguration: 
                RetryMode: ALL_ACTIONS
      ArtifactStore: 
        Type: S3 
        Location:
          Ref: ArtifactStoreS3Location 
        EncryptionKey:
          Id: arn:aws:kms:useast-1:ACCOUNT-ID:key/KEY-ID
          Type: KMS
      DisableInboundStageTransitions: 
        - 
          StageName: Release 
          Reason: "Disabling the transition until integration tests are completed"
      Tags:
        - Key: Project
          Value: ProjectA
        - Key: IsContainerBased
          Value: 'true'
  ```

  如需在失敗時設定階段重試的詳細資訊，請參閱*CloudFormation 《 使用者指南*`StageDeclaration`》中的 [OnFailure](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stagedeclaration.html#cfn-codepipeline-pipeline-stagedeclaration-onfailure)。