

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

# 操作声明
<a name="action-requirements"></a>

管道的操作层具有基本结构，包括以下参数和语法。有关更多信息，请参阅 *CodePipeline API 指南*中的[ActionDeclaration](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_ActionDeclaration.html)对象。

下面的示例以 JSON 和 YAML 格式显示了管道结构的操作层。

------
#### [ YAML ]

```
 
. . . 

  stages:
    - name: Source
      actions:
        - name: Source
          actionTypeId:
            category: Source
            owner: AWS
            provider: S3
            version: '1'
          runOrder: 1
          configuration:
            PollForSourceChanges: 'false'
            S3Bucket: amzn-s3-demo-bucket
            S3ObjectKey: codedeploy_linux.zip
          outputArtifacts:
            - name: SourceArtifact
          inputArtifacts: []
          region: us-west-2
          namespace: SourceVariables
    - name: Build
      actions:
        - name: Build
          actionTypeId:
            category: Build
            owner: AWS
            provider: CodeBuild
            version: '1'
          runOrder: 1
          configuration:
            EnvironmentVariables: >-
              [{"name":"ETag","value":"#{SourceVariables.ETag}","type":"PLAINTEXT"}]
            ProjectName: my-project
          outputArtifacts:
            - name: BuildArtifact
          inputArtifacts:
            - name: SourceArtifact
          region: us-west-2
          namespace: BuildVariables
          runOrder: 1
          configuration:
            CustomData: >-
              Here are the exported variables from the build action: S3 ETAG:
              #{BuildVariables.ETag}
          outputArtifacts: []
          inputArtifacts: []
          region: us-west-2
```

------
#### [ JSON ]

```
 
. . . 

        "stages": [
            {
                "name": "Source",
                "actions": [
                    {
                        "name": "Source",
                        "actionTypeId": {
                            "category": "Source",
                            "owner": "AWS",
                            "provider": "S3",
                            "version": "1"
                        },
                        "runOrder": 1,
                        "configuration": {
                            "PollForSourceChanges": "false",
                            "S3Bucket": "amzn-s3-demo-bucket",
                            "S3ObjectKey": "aws-codepipeline-s3-aws-codedeploy_linux.zip"
                        },
                        "outputArtifacts": [
                            {
                                "name": "SourceArtifact"
                            }
                        ],
                        "inputArtifacts": [],
                        "region": "us-west-2",
                        "namespace": "SourceVariables"
                    }
                ]
            },
            {
                "name": "Build",
                "actions": [
                    {
                        "name": "Build",
                        "actionTypeId": {
                            "category": "Build",
                            "owner": "AWS",
                            "provider": "CodeBuild",
                            "version": "1"
                        },
                        "runOrder": 1,
                        "configuration": {
                            "EnvironmentVariables": "[{\"name\":\"ETag\",\"value\":\"#{SourceVariables.ETag}\",\"type\":\"PLAINTEXT\"}]",
                            "ProjectName": "my-build-project"
                        },
                        "outputArtifacts": [
                            {
                                "name": "BuildArtifact"
                            }
                        ],
                        "inputArtifacts": [
                            {
                                "name": "SourceArtifact"
                            }
                        ],
                        "region": "us-west-2",
                        "namespace": "BuildVariables"
                    }
                ]
      
. . .
```

------

有关适用于提供方类型的示例 `configuration` 详细信息的列表，请参阅[每种提供程序类型的有效配置参数](structure-configuration-examples.md)。

操作结构具有以下要求：
+ 阶段中的所有操作名称都必须是唯一的。
+ 每个管道都需要一个源操作。
+ 不使用连接的源操作可配置为进行更改检测或关闭更改检测。请参阅[更改检测方法](change-detection-methods.md)。
+ 这适用于所有操作，无论它们处于同一阶段还是后续阶段，但输入项目不必是提供输出项目的操作的严格意义上的下一个操作。并行操作可以声明不同的输出构件包，这些包又由不同的后续操作使用。
+ 当您使用 Amazon S3 桶作为部署位置时，您还可以指定对象键。对象键可以是文件名（对象）或前缀（文件夹路径）和文件名的组合。您可以使用变量来指定您希望管道使用的位置名称。Amazon S3 部署操作支持在 Amazon S3 对象键中使用以下变量。  
**使用 Amazon S3 中的变量**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/action-requirements.html)

## `name`
<a name="action.name"></a>

操作的名称。

## `region`
<a name="action.region"></a>

对于提供者 AWS 服务为 AWS 区域 资源的操作。

跨区域操作使用 `Region` 字段指定要创建操作的 AWS 区域 。为此操作创建的 AWS 资源必须在`region`字段中提供的相同区域中创建。无法创建以下操作类型的跨区域操作：
+ 源操作
+ 按第三方提供方列出的操作
+ 按自定义提供方列出的操作

## `roleArn`
<a name="w2aac54c31c17"></a>

将执行声明的操作的 IAM 服务角色的 ARN。这是通过在管道级别指定的 roleArn 来代入的。

## `namespace`
<a name="action.namespace"></a>

操作可以使用变量进行配置。您可以使用 `namespace` 字段为执行变量设置命名空间和变量信息。有关执行变量和操作输出变量的参考信息，请参阅[变量参考](reference-variables.md)。

**注意**  
对于 Amazon ECR、Amazon S3 或 CodeCommit 源，您还可以使用输入转换条目创建源替换，以便`revisionValue`在 EventBridge 管道事件中使用 in，其中派生自对象密钥、提交或图像 ID 的源事件变量。`revisionValue`有关更多信息，请参阅[Amazon ECR 源操作和 EventBridge 资源](create-cwe-ecr-source.md)、[连接到启用事件源的 Amazon S3 源操作](create-S3-source-events.md)或[CodeCommit 源操作和 EventBridge](triggering.md)下的流程中包含的输入转换条目的可选步骤。

## `actionTypeId`
<a name="action.actionTypeId"></a>

操作类型 ID 由以下四个字段组合而成。

### `category`
<a name="action.actionTypeId.category"></a>

管道中的操作或步骤的类型，如源操作。每种操作类型都有一组特定的有效操作提供程序。有关按操作类型划分的有效提供程序列表，请参阅[操作结构参考](action-reference.md)。

以下是以下方面的有效`actionTypeId`类别（操作类型） CodePipeline：
+ `Source`
+ `Build`
+ `Approval`
+ `Deploy`
+ `Test`
+ `Invoke`
+ `Compute`

### `owner`
<a name="action.actionTypeId.owner"></a>

对于当前受支持的所有操作类型，唯一有效的所有者字符串为 `AWS`、`ThirdParty` 或 `Custom`。有关特定操作的有效拥有者字符串，请参阅[操作结构参考](action-reference.md)。

有关更多信息，请参阅 [CodePipeline API 参考](https://docs.aws.amazon.com/codepipeline/latest/APIReference)。

### `version`
<a name="action.actionTypeId.version"></a>

操作的版本。

### `provider`
<a name="action.actionTypeId.provider"></a>

操作提供者，例如 CodeBuild。
+ 操作类别的有效提供方类型因类别而异。例如，对于源操作类别，有效的提供程序类型为 `S3`、`CodeStarSourceConnection`、`CodeCommit` 或 `Amazon ECR`。此示例显示了使用 `S3` 提供方的源操作的结构：

  ```
  "actionTypeId": {
    "category": "Source",
    "owner": "AWS",
    "version": "1",
    "provider": "S3"},
  ```

## `InputArtifacts`
<a name="action.inputArtifacts"></a>

该字段包含输入构件结构（如果该操作类别支持）。操作的输入构件必须与前一操作中声明的输出构件完全相符。例如，如果前一操作包含以下声明：

```
"outputArtifacts": [
    {
    "MyApp"
    }
],
```

 并且没有其他输出项目，则后一操作的输入项目必须为：

```
"inputArtifacts": [
    {
    "MyApp"
    }
],
```

例如，源操作不能有输入构件，因为它是管道中的第一个操作。不过，源操作总是会有由后续操作处理的输出构件。源操作的输出项目是源存储库中的应用程序文件，这些文件经过压缩并通过构件存储桶提供，这些文件由以下操作处理，例如使用生成命令对应用程序文件执行操作的 CodeBuild操作。

以不能有输出构件的操作为例，部署操作没有输出构件，因为这些操作通常是管道中的最后一个操作。

### `name`
<a name="action.inputArtifacts.name"></a>

操作的输入构件的构件名称。

## `outputArtifacts`
<a name="action.outputArtifacts"></a>

输出构件名称在管道内必须唯一。例如，一个管道可以包括两个操作，一个具有名为 `"MyApp"` 的输出项目，另一个具有名为 `"MyBuiltApp"` 的输出项目。但是，管道不能包含两个都具有名为 `"MyApp"` 的输出项目的操作。

 该字段包含输出构件结构（如果该操作类别支持）。操作的输出构件必须与前一操作中声明的输出构件完全相符。例如，如果前一操作包含以下声明：

```
"outputArtifacts": [
    {
    "MyApp"
    }
],
```

 并且没有其他输出项目，则后一操作的输入项目必须为：

```
"inputArtifacts": [
    {
    "MyApp"
    }
],
```

例如，源操作不能有输入构件，因为它是管道中的第一个操作。不过，源操作总是会有由后续操作处理的输出构件。源操作的输出项目是源存储库中的应用程序文件，这些文件经过压缩并通过构件存储桶提供，这些文件由以下操作处理，例如使用生成命令对应用程序文件执行操作的 CodeBuild操作。

以不能有输出构件的操作为例，部署操作没有输出构件，因为这些操作通常是管道中的最后一个操作。

### `name`
<a name="action.outputArtifacts.name"></a>

操作的输出构件的构件名称。

## `configuration`（由操作提供程序提供）
<a name="action.configuration"></a>

操作配置包含适合提供程序类型的详细信息和参数。在以下部分中，示例操作配置参数特定于 S3 源操作。

操作配置和 input/output 构件限制可能因操作提供者而异。有关按操作提供程序划分的操作配置示例的列表，请参阅[操作结构参考](action-reference.md)和[每种提供程序类型的有效配置参数](structure-configuration-examples.md)中的表。该表提供了每种提供程序类型的操作参考链接，其中详细列出了每个操作的配置参数。有关包含每个操作提供程序的输入和输出构件限制的表，请参阅[每种操作类型的有效输入和输出构件](reference-action-artifacts.md)。

使用操作时需考虑以下事项：
+ 源操作没有输入构件，部署操作没有输出构件。
+ 对于不使用连接的源操作提供程序（如 S3），必须使用 `PollForSourceChanges` 参数来指定是否要在检测到更改时自动启动管道。请参阅[`PollForSourceChanges` 参数的有效设置](PollForSourceChanges-defaults.md)。
+ 要配置自动更改检测以启动管道，或禁用更改检测，请参阅[源操作和更改检测方法](change-detection-methods.md)。
+ 要配置带筛选功能的触发器，请使用连接的源操作，然后参阅[使用触发器和筛选功能自动启动管道](pipelines-triggers.md)。
+ 有关每个操作的输出变量，请参阅[变量参考](reference-variables.md)。
**注意**  
对于 Amazon ECR、Amazon S3 或 CodeCommit 源，您还可以使用输入转换条目创建源替换，以便`revisionValue`在 EventBridge 管道事件中使用 in，其中派生自对象密钥、提交或图像 ID 的源事件变量。`revisionValue`有关更多信息，请参阅[Amazon ECR 源操作和 EventBridge 资源](create-cwe-ecr-source.md)、[连接到启用事件源的 Amazon S3 源操作](create-S3-source-events.md)或[CodeCommit 源操作和 EventBridge](triggering.md)下的流程中包含的输入转换条目的可选步骤。
**重要**  
非活动时间超过 30 天的管道将禁用管道轮询功能。有关更多信息，请参阅管道结构参考[pollingDisabledAt](pipeline-requirements.md#metadata.pollingDisabledAt)中的。有关将管道从轮询迁移为基于事件的更改检测的步骤，请参阅[更改检测方法](change-detection-methods.md)。

**注意**  
 CodeCommit 和 S3 源操作需要配置的更改检测资源（ EventBridge 规则），或者使用选项轮询存储库以获取源更改。对于具有 Bitbucket GitHub、或 E GitHub nterprise Server 源操作的管道，您无需设置 webhook 或默认进行轮询。连接操作会为您管理更改检测。

## `runOrder`
<a name="action.runOrder"></a>

一个指示阶段内操作的运行顺序的正整数。阶段中的并行操作显示为具有相同的整数。例如，运行顺序为 2 的两个操作将在该阶段的第一个操作运行后并行运行。

操作的默认 `runOrder` 值为 1。值必须是正整数 (自然数)。不能使用分数、小数、负数或零。要指定一个操作序列，请对序列中的第一个操作使用最小的数字，然后对其余的每个操作使用逐渐递增的数字。要指定并行操作，请对要并行运行的每个操作使用同一整数。在控制台中，您可以通过在要运行操作的阶段中选择该级别的**添加操作组**来指定操作串行序列，也可以通过选择**添加操作**来指定并行序列。*操作组*是指同一级别中一个或多个操作的运行顺序。

例如，如果您希望一个阶段中的三个操作依次运行，则应将第一个操作的 `runOrder` 值指定为 1，将第二个操作的 `runOrder` 值指定为 2，将第三个操作的 `runOrder` 值指定为 3。但是，如果您希望第二个和第三个操作并行运行，则应将第一个操作的 `runOrder` 值指定为 1，将第二个和第三个操作的 `runOrder` 值均指定为 2。

**注意**  
顺序操作的编号不必十分严格。例如，如果您的序列中有三个操作并决定删除第二个操作，则不需要对第三个操作的 `runOrder` 值重新编号。因为该操作的 `runOrder` 值 (3) 大于第一个操作的 `runOrder` 值 (1)，所以它将在此阶段中的第一个操作之后连续运行。