

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

# 为失败的阶段或失败的操作配置阶段重试
<a name="stage-retry"></a>

您可以重试失败的阶段，而不必从头开始再次运行管道。为此，您可以重试阶段中失败的操作，也可以从阶段中的第一个操作开始重试所有操作。当重试阶段中失败的操作时，所有仍在进行的操作都会继续运行，而失败的操作将会重新触发。当从阶段中的第一个操作开始重试失败的阶段时，该阶段中不会有任何正在进行的操作。在重试某个阶段之前，它其中的操作必须全部失败，或者有些操作失败，有些操作成功。

**重要**  
重试失败的阶段时，会从其中第一个操作开始重试所有操作，而重试失败的操作则会重试阶段中所有失败的操作。这会覆盖同一执行中之前成功的操作的输出构件。  
尽管构件可能会被覆盖，但之前成功的操作的执行历史记录仍会保留。

如果使用控制台查看管道，则可重试的阶段上将会出现**重试阶段**按钮或**重试失败的操作**按钮。

如果您使用的是 Amazon 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. 登录 Amazon Web Services 管理控制台 并打开 CodePipeline 控制台，[网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home](https://console.amazonaws.cn/codesuite/codepipeline/home)。

   将显示与您的 Amazon 账户关联的所有管道的名称。

1.  在**名称**中，选择管道的名称。

1. 找到包含失败操作的阶段，然后选择以下项之一：
   + 要重试阶段中的所有操作，请选择**重试阶段**。
   + 要仅重试阶段中失败的操作，请选择**重试失败的操作**。  
![\[包含 CodeCommit 源阶段和失败 CodeDeploy 部署阶段的示例管道\]](http://docs.amazonaws.cn/codepipeline/latest/userguide/images/retry-failed-stage.png)

   如果该阶段中所有重试的操作都已成功完成，管道将继续运行。

### 手动重试失败的阶段（CLI）
<a name="stage-retry-cli"></a>

**重试失败的阶段或阶段中失败的操作 (CLI)**

要使用重试所有操作或所有失败的操作，请使用以下参数运行**retry-stage-execution**命令： Amazon CLI 

```
--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.amazonaws.cn/cli/latest/reference/codepipeline/get-pipeline-state.html](https://docs.amazonaws.cn/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.amazonaws.cn/cli/latest/reference/codepipeline/get-pipeline-state.html](https://docs.amazonaws.cn/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.amazonaws.cn/cli/latest/reference/codepipeline/retry-stage-execution.html](https://docs.amazonaws.cn/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. 登录 Amazon Web Services 管理控制台 并打开 CodePipeline 控制台，[网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home](https://console.amazonaws.cn/codesuite/codepipeline/home)。

   将显示与您的 Amazon 账户关联的所有管道的名称和状态。

1. 在 **Name** 中，选择您要编辑的管道的名称。

1. 在管道详细信息页中，选择**编辑**。

1. 在**编辑**页面上，对于要编辑的操作，选择**编辑阶段**。

1. 选择**自动阶段配置：**，然后选择**启用阶段失败时的自动重试**。将更改保存到您的管道中。

1. 在**自动阶段配置：**中，选择以下重试模式之一：
   + 要指定模式将重试阶段中的所有操作，请选择**重试失败的阶段**。
   + 要指定模式将只重试阶段中失败的操作，请选择**重试失败的操作**。

   将更改保存到您的管道中。  
![\[示例编辑屏幕，用于在中 CodePipeline配置舞台失败时自动重试。\]](http://docs.amazonaws.cn/codepipeline/latest/userguide/images/retry-configure.png)

1. 管道运行后，如果出现阶段失败，则会自动重试。以下示例显示了已自动重试的构建阶段。  
![\[具有已重试过一次的失败阶段的管道示例。\]](http://docs.amazonaws.cn/codepipeline/latest/userguide/images/stage-auto-retry-example.png)

1. 要查看重试尝试的详细信息，请选择。此时将显示下面的窗口。  
![\[重试阶段元数据窗口示例，显示有一次尝试。\]](http://docs.amazonaws.cn/codepipeline/latest/userguide/images/retry-stage-metadata.png)

### 配置阶段自动重试（CLI）
<a name="stage-retry-auto-cli"></a>

要使用 Amazon CLI 将阶段配置为在失败时自动重试，请使用命令创建或更新管道，详见[创建管道、阶段和操作](pipelines-create.md)和[在 CodePipeline 中编辑管道](pipelines-edit.md)中。
+ 打开终端（Linux、macOS 或 Unix）或命令提示符（Windows），并使用 Amazon CLI 运行 `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",
                      },
              }
  ```

### 配置阶段自动重试（Amazon CloudFormation）
<a name="stage-retry-auto-cfn"></a>

 Amazon 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'
  ```

  有关配置失败时阶段重试的更多信息，请参阅[OnFailure](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stagedeclaration.html#cfn-codepipeline-pipeline-stagedeclaration-onfailure)《*Amazon CloudFormation 用户指南*》`StageDeclaration`中的。