我的 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。