筛选代码推送或拉取请求的触发器 - Amazon CodePipeline
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

筛选代码推送或拉取请求的触发器

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

您可以为以下触发器类型指定过滤器:

  • Push

    当更改推送到源存储库时,推送触发器会启动管道。执行将使用你要推送的分支(即目标分支)的提交。您可以根据分支、文件路径或 Git 标签筛选推送触发器。

  • 拉取请求

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

    注意

    拉取请求支持的事件类型包括打开、更新或关闭(合并)。所有其他拉取请求事件都将被忽略。

管道定义允许您在相同的推送触发器配置中组合不同的过滤器。有关管道定义的详细信息,请参见管道中的触发器筛选 JSON (CLI)。有效的组合是:

  • 标签

  • 分支

  • 分支 + 文件路径

您可以按如下方式指定过滤器类型:

  • 没有过滤器

    此触发器配置会在任何推送到作为操作配置一部分指定的默认分支时启动您的管道。

  • 指定过滤器

    您可以添加一个过滤器,该过滤器在特定的过滤器(例如代码推送的分支名称)上启动管道,并获取确切的提交。这也将管道配置为不在发生任何更改时自动启动。

  • 不要检测到更改

    这不会添加触发器,也不会在发生任何更改时自动启动管道。

下表为每种事件类型提供了有效的筛选选项。该表还显示了在操作配置中自动检测更改时,哪些触发器配置默认为 true 或 false。

触发器配置 事件类型 筛选条件选项 检测变化
添加触发器 — 无过滤器 none none true
添加触发器 — 在推送代码时进行筛选 推送事件 Git 标签、分支、文件路径 false
添加触发器 — 筛选拉取请求 拉取请求 分支、文件路径 false
没有触发器 — 不检测 none none false
注意

此触发器类型使用自动更改检测(作为Webhook触发器类型)。使用此触发器类型的源操作提供程序是为代码推送配置的连接(Bitbucket Cloud GitHub、E GitHub nterprise Server、 GitLab .com 和 GitLab自我管理)。

为了进行筛选,支持 glob 格式的正则表达式模式,详情请参见。使用语法中的 glob 模式

注意

在某些情况下,对于具有按文件路径筛选的触发器的管道,当首次创建带有文件路径筛选器的分支时,管道可能无法启动。有关更多信息,请参阅 使用按文件路径进行触发器筛选的连接的管道可能无法在创建分支时启动

触发器过滤器的注意事项

使用触发器时,需要考虑以下注意事项。

  • 对于带有分支和文件路径过滤器的触发器,首次推送分支时,管道将无法运行,因为无法访问为新创建的分支更改的文件列表。

  • 如果推送(分支筛选器)和拉取请求(分支过滤器)触发配置相交,合并拉取请求可能会触发两个管道执行。

触发器过滤器示例

对于带有推送和拉取请求事件类型过滤器的 Git 配置,指定的过滤器可能会相互冲突。以下是推送和拉取请求事件的有效过滤器组合示例。

您可以在单个配置对象中组合过滤器,这些过滤器将使用AND操作,这意味着只有完全匹配才会启动管道。以下示例显示了 Git 配置,在 “配置对象” 中包含两个不同的过滤器(filePathsbranches),而不是一个过滤器。在以下示例中,filePaths将AND以 '结branches尾:

{ "filePaths": { "includes": ["common/**/*.js"] }, "branches": { "includes": ["feature/**"] } }

使用上面的 Git 配置,此示例显示了一个由于AND操作成功而启动管道执行的事件。

{ "ref": "refs/heads/feature/triggers", ... "commits": [ { ... "modified": [ "common/app.js" ] ... } ] }

此示例显示了一个事件,该事件无法启动管道执行,因为分支可以筛选,但文件路径不能。

{ "ref": "refs/heads/feature/triggers", ... "commits": [ { ... "modified": [ "src/Main.java" ] ... } ] }

同时,推送数组中的触发器配置对象使用 OR 操作。这允许您配置多个触发器来启动同一管道的执行。以下示例显示了一个 Git 配置,该配置对象中只有一个 filter (branches)。IncludesExcludes操作将采用 Or'ed,这意味着如果分支与排除模式匹配(例如feature-branch在示例中),则除非包含也匹配,否则管道不会被触发。如果包含模式匹配(例如main分支),则管道将被触发。

{ "branches": { "Includes": [ "main" ], "Excludes": [ "feature-branch" ] }

有关JSON结构中字段定义的列表,请参见管道中的触发器筛选 JSON (CLI)