如何解决 AWS CodePipeline 运行两次的问题?

2 分钟阅读
0

我想解决 AWS CodePipeline 运行多次的问题。

简短描述

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

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

如果由于存在多个相同的 CloudWatch Events 规则而触发管道启动,请删除或禁用任何重复的规则

如果由于轮询而触发管道启动,请阅读“了解 PollForSourceChanges 参数的默认行为”部分。然后根据您的场景,完成以下其中一个部分的步骤:

  • 如果您使用 AWS CloudFormation 创建管道,请完成“更新 AWS CloudFormation 模板”部分中的步骤。
  • 如果您使用 AWS 命令行界面 (AWS CLI) 创建管道,请完成“使用 JSON 文件更新管道”部分中的步骤。
  • 如果您使用 AWS SDK 创建管道,请完成“根据您的语言的配置语法更新管道”部分中的步骤。

**重要事项:**使用创建管道时使用的相同方法更新管道。避免对管道进行带外更改,并确保完成仅适用于您场景的部分中的步骤。例如,如果您使用 AWS CloudFormation 创建管道,则请仅按照“更新 AWS CloudFormation 模板”部分中的步骤进行操作。

解决方法

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

确认导致出现问题的原因

  1. 打开 CodePipeline 控制台
  2. 对于 Name(名称),选择管道的名称。
  3. 选择 View history(查看历史记录)。
  4. Trigger(触发器)列中,检查是否存在因重复的 CloudWatch Events 规则触发的管道启动或因轮询而触发的管道启动。
  5. 如果存在因多个相同的 CloudWatch Events 规则而触发的启动,请删除或停用任何重复的规则
    如果由于轮询而触发管道启动,请继续阅读以下故障排除部分。

了解 pollForSourceChanges 参数的默认行为

以下内容决定了 PollForSourceChanges 和 CloudWatch Events 规则的行为:

  • PollForSourceChanges 参数的默认行为由用于创建管道的方法决定。
  • 在许多情况下,PollForSourceChanges 的值默认设置为 true,必须将其禁用。
  • 如果您使用 CodePipeline 控制台创建管道,则源检测方法会自动设置为 Amazon CloudWatch Events。
  • 如果您使用 AWS CloudFormation、AWS CLI 或 AWS SDK 创建管道,且未指定更改检测方法,则 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-pipeline 命令可以使用该文件。

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

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

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

根据您的语言的配置语法更新管道

有关更新管道的说明,请参阅您的语言对应的 SDK 文档

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

AWS 官方
AWS 官方已更新 2 个月前