如何修复 AWS CodePipeline 运行两次的问题?

上次更新时间:2021 年 2 月 15 日

我的 AWS CodePipeline 运行了两次。如何解决此问题?

简短描述

AWS CodePipeline 多次运行的常见原因有两个:

要解决此问题,首先检查管道历史记录,以确定导致管道运行两次的原因。

如果相同的 CloudWatch Events 规则多次触发了管道启动,则删除或禁用任何重复的规则

如果存在轮询触发的管道启动,请阅读了解 PollForSourceChanges 参数的默认行为部分,然后根据您的情况,完成以下相应一个部分中的步骤:

  • 如果您的管道是使用 AWS CloudFormation 创建的,请完成更新 AWS CloudFormation 模板部分中的步骤。
  • 如果您的管道是使用 AWS 命令行界面 (AWS CLI) 创建的,请完成使用 JSON 文件更新管道部分中的步骤。
  • 如果您的管道是使用 AWS 开发工具包创建的,请完成基于语言的配置语法更新管道部分中的步骤。

重要提示:更新管道的方法应与创建管道时使用的方法相同。不要对管道做出超出范围的更改,并且仅完成与您的情况对应的部分中的步骤。例如,如果您的管道是使用 AWS CloudFormation 创建的,则应仅执行更新 AWS CloudFormation 模板部分中的步骤。

解决方法

注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

确定导致管道运行两次的原因

1.    打开 CodePipeline 控制台

2.    在 Name(名称)中,选择管道的名称。

3.    选择 View history(查看历史记录)。

4.    在 Trigger(触发器)列中,检查是否存在任何重复的 CloudWatch Events 规则触发或轮询触发的管道启动。

5.    如果同一 CloudWatch Events 规则多次触发了启动,则删除或禁用任何重复的规则

–或者–

如果有轮询触发的管道启动,则执行以下问题排查步骤。

了解 PollForSourceChanges 参数的默认行为

请考虑以下事项:

  • PollForSourceChanges 参数的默认行为取决于创建管道的方法。
  • 在许多情况下,PollForSourceChanges 的值默认设置为 true,并且必须禁用。
  • 如果您使用 CodePipeline 控制台创建管道,则源检测方法将自动设置为 Amazon CloudWatch Events(检测源更改的推荐方法)。
  • 如果您的管道是使用 AWS CloudFormation、AWS CLI 或 AWS 开发工具包创建的,并且没有指定更改检测方法,则 PollForSourceChanges 的值默认设置为 true(取决于创建方法)。
  • 如果您的管道是使用 CodePipeline 控制台以外的方法创建的,然后使用控制台对管道进行了超范围的更新,则 CodePipeline 会自动创建一个额外的 CloudWatch Events 规则。
  • 如果您在 AWS CloudFormation 模板中创建了一个 CloudWatch Events 规则,或者为您的 GitHub 版本 1 存储库创建了一个 Webhook,但没有设置 PollForSourceChanges 参数,则您最终会使用两种方法来检测源中的更改。这会导致您的管道运行两次。

更新 AWS CloudFormation 模板

在 AWS CloudFormation 模板或管道配置文件中,将 PollForSourceChanges 参数的值设置为 false

注意PollForSourceChanges 参数的值默认设置为 true

有关 GitHub 版本 1 Webhook 的更多信息,请参阅使用 Webhook 启动管道

用 JSON 文件更新管道

1.    将管道结构复制到 JSON 文件:

$ aws codepipeline get-pipeline --name NAME_OF_YOUR_PIPELINE  > pipeline.json

2.    在文本编辑器中打开 pipeline.json 文件,然后将 PollForSourceChanges 参数添加到源操作配置部分。将参数值设置为 false

3.    从文件中移除以下元数据字段:
"metadata":{}
"created"
"pipelineARN"
"updated"
重要提示:
必须从 pipeline.json 文件中移除这些元数据行,以便下面的 update-line 命令可以使用该文件。

4.    保存 pipeline.json 文件,然后运行下面的 update-pipeline 命令,以将更改应用到文件:

$ aws codepipeline update-pipeline --cli-input-json file://pipeline.json

有关更多信息,请参阅编辑管道 (AWS CLI)

基于语言的配置语法更新管道

有关更新管道的说明,请参阅您所用语言的开发工具包文档

例如,如果您是使用 Python 部署的管道,则可以在管道的配置部分将 PollForSourceChanges 设置为 false


这篇文章对您有帮助吗?


您是否需要账单或技术支持?