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

上次更新时间:2020 年 6 月 12 日

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

简短描述

首先,请阅读了解 PollForSourceChanges 参数的默认行为部分。

然后根据您的情况,完成下面其中一个部分中的步骤:

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

如果完成前面部分中的步骤后,您的管道仍然运行两次,请完成检查 Amazon CloudWatch Events 规则部分中的步骤。

重要提示:使用与创建管道相同的方法更新管道。避免对管道进行带外更改,并确保仅完成适用于您的情况的部分中的步骤。例如,如果您是使用 AWS CloudFormation 创建的管道,则应严格遵循更新 AWS CloudFormation 模板部分中的步骤。

解决方法

了解 PollForSourceChanges 参数的默认行为

请考虑以下事项:

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

更新 AWS CloudFormation 模板

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

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

有关更多信息,请参阅为 GitHub 源创建 Webhook(AWS CloudFormation 模板)

用 JSON 文件更新管道

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

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

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

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

3.    保存 pipeline.json 文件,然后运行以下命令,以将更改应用于文件:

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

有关示例,请参阅为 GitHub 源创建 Webhook

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

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

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

检查 Amazon CloudWatch Events 规则

检查是否有任何与您的管道具有相同目标的 CloudWatch Events 规则,然后删除或禁用任何重复的规则


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?