

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

# 添加带有代码推送或拉取请求事件类型的触发器
<a name="pipelines-filter"></a>

您可以为管道触发器配置筛选条件，以便针对不同的 Git 事件启动管道执行，如标签或分支推送、特定文件路径的更改、向特定分支打开拉取请求等。您可以使用 Amazon CodePipeline 控制台或中的**create-pipeline**和**update-pipeline**命令 Amazon CLI 来配置触发器过滤器。

**注意**  
操作配置默认 `BranchName` 字段定义了单个分支，而带有筛选条件的触发器可用于您指定的任何一个或多个分支。对于使用触发器按推送或拉取请求筛选分支的管道，管道不会在操作配置中使用默认 `BranchName` 字段分支。但是，手动启动管道时，操作配置中 `BranchName` 字段中的分支是默认分支。有关示例，请参阅[5：在使用默认操作配置 BranchName 进行手动启动时配置触发器](pipelines-triggers.md#example-filter-default-manual)。

您可以为以下触发器类型指定筛选条件：
+ **Push**

  当更改推送到源存储库时，推送触发器会启动管道。执行将使用*推送到*的分支（即目标分支）的提交。您可以根据分支、文件路径或 Git 标签筛选推送触发器。
+ **拉取请求**

  在源存储库中打开、更新或关闭拉取请求时，拉取请求触发器会启动管道。执行将使用*拉取自*的分支（即源分支）的提交。您可以根据分支和文件路径筛选拉取请求触发器。

  受支持的拉取请求事件类型有以下几种。所有其它拉取请求事件都会被忽略。
  + 已打开
  + 已更新
  + 已关闭（已合并）
**注意**  
某些拉取请求事件行为可能因提供方而异。有关更多信息，请参阅 [不同提供商的触发器的拉取请求事件](pipelines-triggers.md#pipelines-filter-pullrequest-events)。

通过管道定义，您可以在同一推送触发器配置中组合不同的筛选条件。有关管道定义的详细信息，请参阅[为推送和拉取请求事件类型添加筛选条件（CLI）](#pipelines-filter-cli)。有关字段定义的列表，请参阅本指南中*管道结构参考*中的[触发器](pipeline-requirements.md#pipeline.triggers)。

**Topics**
+ [为推送和拉取请求事件类型添加筛选条件（控制台）](#pipelines-filter-console)
+ [为推送和拉取请求事件类型添加筛选条件（CLI）](#pipelines-filter-cli)
+ [为推送和拉取请求事件类型添加过滤器（Amazon CloudFormation 模板）](#pipelines-filter-cfn)

## 为推送和拉取请求事件类型添加筛选条件（控制台）
<a name="pipelines-filter-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. 在**事件类型**中，从以下选项中选择**推送**。
   + 选择**推送**，以便在向源存储库推送更改时启动管道。选择此项后，字段就能指定分支、文件路径或 Git 标签的筛选条件。
   + 选择**拉取请求**，以便在源存储库中打开、更新或关闭拉取请求时启动管道。选择此项后，字段就能指定目标分支和文件路径的筛选条件。

1. 在**推送**下的**筛选类型**中，选择以下选项之一。
   + 选择**分支**，指定触发器监控的源存储库中的分支，以便知道何时开始运行工作流。在**包含**中，以 glob 格式输入分支名称的模式，这些分支是您要为触发器配置指定的分支，用于在指定分支中发生更改时启动您的管道。在**排除**中，以 glob 格式输入分支名称的正则表达式模式，这些分支是您要为触发器配置指定的分支，用于在指定分支中发生更改时忽略且不启动您的管道。请参阅[使用语法中的 glob 模式](syntax-glob.md)了解更多信息。
**注意**  
如果包含和排除二者具有相同的模式，则默认为排除该模式。

     您可以使用 glob 模式来定义分支名称。例如，使用 `main*` 来匹配以 `main` 开头的所有分支。请参阅[使用语法中的 glob 模式](syntax-glob.md)了解更多信息。

     对于推送触发器，请指定要*推送到*的分支，即*目标*分支。对于拉取请求触发器，请指定要向其打开拉取请求的目标分支。
   + （可选）在**文件路径**下，为触发器指定文件路径。根据情况在**包含**和**排除**中输入名称。

     您可以使用 glob 模式来定义文件路径名。例如，使用 `prod*` 来匹配以 `prod` 开头的所有文件路径。请参阅[使用语法中的 glob 模式](syntax-glob.md)了解更多信息。
   + 选择**标签**将管道触发器配置为通过 Git 标签启动。在**包含**中，以 glob 格式输入标签名称的模式，这些标签是您要为触发器配置指定的标签，用于在发布一个或多个指定标签时启动您的管道。在**排除**中，以 glob 格式输入标签名称的正则表达式模式，这些标签是您要为触发器配置指定的标签，用于在发布一个或多个指定标签时忽略且不启动您的管道。如果包含和排除二者具有相同的标签模式，则默认为排除该标签模式。

1. 在**推送**下的**筛选类型**中，选择以下选项之一。
   + 选择**分支**，指定触发器监控的源存储库中的分支，以便知道何时开始运行工作流。在**包含**中，以 glob 格式输入分支名称的模式，这些分支是您要为触发器配置指定的分支，用于在指定分支中发生更改时启动您的管道。在**排除**中，以 glob 格式输入分支名称的正则表达式模式，这些分支是您要为触发器配置指定的分支，用于在指定分支中发生更改时忽略且不启动您的管道。请参阅[使用语法中的 glob 模式](syntax-glob.md)了解更多信息。
**注意**  
如果包含和排除二者具有相同的模式，则默认为排除该模式。

     您可以使用 glob 模式来定义分支名称。例如，使用 `main*` 来匹配以 `main` 开头的所有分支。请参阅[使用语法中的 glob 模式](syntax-glob.md)了解更多信息。

     对于推送触发器，请指定要*推送到*的分支，即*目标*分支。对于拉取请求触发器，请指定要向其打开拉取请求的目标分支。
   + （可选）在**文件路径**下，为触发器指定文件路径。根据情况在**包含**和**排除**中输入名称。

     您可以使用 glob 模式来定义文件路径名。例如，使用 `prod*` 来匹配以 `prod` 开头的所有文件路径。请参阅[使用语法中的 glob 模式](syntax-glob.md)了解更多信息。
   + 选择**拉取请求**来配置管道触发器配置，在您指定的拉取请求事件发生时启动管道。

## 为推送和拉取请求事件类型添加筛选条件（CLI）
<a name="pipelines-filter-cli"></a>

您可以更新管道 JSON，为触发器添加筛选条件。

要使用创建或更新您的管道，请使用`create-pipeline`或`update-pipeline`命令。 Amazon CLI 

下面的 JSON 结构示例为 `create-pipeline` 下的字段定义提供了参考。

有关字段定义的列表，请参阅本指南中*管道结构参考*中的[触发器](pipeline-requirements.md#pipeline.triggers)。

```
{
    "pipeline": {
        "name": "MyServicePipeline",
        "triggers": [
            {
                "provider": "Connection",
                "gitConfiguration": {
                    "sourceActionName": "ApplicationSource",
                    "push": [
                        {
                            "filePaths": {
                                "includes": [
                                    "projectA/**",
                                    "common/**/*.js"
                                ],
                                "excludes": [
                                    "**/README.md",
                                    "**/LICENSE",
                                    "**/CONTRIBUTING.md"
                                ]
                            },
                            "branches": {
                                "includes": [
                                    "feature/**",
                                    "release/**"
                                ],
                                "excludes": [
                                    "mainline"
                                ]
                            },
                            "tags": {
                                "includes": [
                                    "release-v0", "release-v1"
                                ],
                                "excludes": [
                                    "release-v2"
                                ]
                            }
                        }
                    ],
                    "pullRequest": [
                        {
                            "events": [
                                "CLOSED"
                            ],
                            "branches": {
                                "includes": [
                                    "feature/**",
                                    "release/**"
                                ],
                                "excludes": [
                                    "mainline"
                                ]
                            },
                            "filePaths": {
                                "includes": [
                                    "projectA/**",
                                    "common/**/*.js"
                                ],
                                "excludes": [
                                    "**/README.md",
                                    "**/LICENSE",
                                    "**/CONTRIBUTING.md"
                                ]
                            }
                        }
                    ]
                }
            }
        ],
        "stages": [
            {
                "name": "Source",
                "actions": [
                    {
                        "name": "ApplicationSource",
                        "configuration": {
                            "BranchName": "mainline",
                            "ConnectionArn": "arn:aws:codestar-connections:eu-central-1:111122223333:connection/fe9ff2e8-ee25-40c9-829e-65f8EXAMPLE",
                            "FullRepositoryId": "monorepo-example",
                            "OutputArtifactFormat": "CODE_ZIP"
                        }
                    }
                ]
            }
        ]
    }
}
```

## 为推送和拉取请求事件类型添加过滤器（Amazon CloudFormation 模板）
<a name="pipelines-filter-cfn"></a>

您可以在中更新管道资源 Amazon CloudFormation 以添加触发器筛选。

以下示例模板片段为触发器字段定义提供了 YAML 参考。有关字段定义的列表，请参阅本指南中*管道结构参考*中的[触发器](pipeline-requirements.md#pipeline.triggers)。

有关连接源和触发器筛选器配置的完整模板示例，请参阅*《 Amazon CloudFormation 用户指南》*中的[包含两个阶段的管道和触发器配置](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html#aws-resource-codepipeline-pipeline--examples--Pipeline_with_two_stages_and_trigger_configuration)。

```
pipeline:
  name: MyServicePipeline
  executionMode: PARALLEL
  triggers:
    - provider: CodeConnection
      gitConfiguration:
        sourceActionName: ApplicationSource
        push:
          - filePaths:
              includes:
                - projectA/**
                - common/**/*.js
              excludes:
                - '**/README.md'
                - '**/LICENSE'
                - '**/CONTRIBUTING.md'
            branches:
              includes:
                - feature/**
                - release/**
              excludes:
                - mainline
          - tags:
              includes:
                - release-v0
                - release-v1
              excludes:
                - release-v2
        pullRequest:
          - events:
              - CLOSED
            branches:
              includes:
                - feature/**
                - release/**
              excludes:
                - mainline
            filePaths:
              includes:
                - projectA/**
                - common/**/*.js
              excludes:
                - '**/README.md'
                - '**/LICENSE'
                - '**/CONTRIBUTING.md'
  stages:
    - name: Source
      actions:
        - name: ApplicationSource
          configuration:
            BranchName: mainline
            ConnectionArn: arn:aws:codestar-connections:eu-central-1:111122223333:connection/fe9ff2e8-ee25-40c9-829e-65f85EXAMPLE
            FullRepositoryId: monorepo-example
            OutputArtifactFormat: CODE_ZIP
```