You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CodePipeline中CodeBuild重复运行循环问题求助

AWS CodeBuild重复循环触发问题排查与解决

我搭建了基于AWS CodePipeline -> CodeBuild -> CodeDeploy的CI/CD流水线,后续在CodePipeline中添加了人工审批环节,但现在遇到了CodeBuild重复运行的循环问题,进而导致CodeDeploy被反复触发。

正常触发流程(GitHub代码变更时):

  • CodePipeline源阶段触发
  • CodeBuild构建Docker镜像并推送到ECR
  • CodeDeploy执行build.sh文件,在EC2实例中创建Docker容器

原本所有步骤运行正常,添加人工审批后出现了循环问题。

可能的原因

  1. CodePipeline源触发器配置错误:CodeBuild的输出产物(如S3桶中的构建文件)被误设为源阶段的触发源,导致每次CodeBuild完成后再次触发Pipeline。
  2. GitHub Webhook重复触发:存在重复的Webhook配置,或CodeBuild流程中存在修改GitHub仓库的操作(如推送tag/文件),引发新一轮Pipeline触发。
  3. CodePipeline阶段逻辑错误:添加人工审批后,阶段跳转逻辑异常,导致构建阶段被重复调用。
  4. ECR镜像推送触发额外Pipeline:若有其他Pipeline或CloudWatch事件规则监听ECR镜像变更,可能间接触发当前Pipeline重复运行。

解决方案

检查CodePipeline源触发器

进入CodePipeline控制台,确认源阶段仅监听GitHub仓库的代码变更事件,而非CodeBuild输出的S3存储桶或ECR镜像资源。

验证GitHub Webhook配置

登录GitHub仓库的「Settings -> Webhooks」页面:

  • 确认仅存在一个指向AWS CodePipeline的Webhook
  • 仅勾选push事件(避免全量事件触发)
  • 检查CodeBuild流程中是否存在git push等修改GitHub仓库的操作,如有则移除

排查CodePipeline阶段配置

查看Pipeline的阶段编排,确认人工审批环节的位置正确,不存在循环跳转逻辑(如审批后错误回到构建阶段)。

检查ECR相关触发器

查看是否有其他Pipeline或CloudWatch事件规则监听ECR镜像推送事件,若有则调整规则范围,避免触发当前Pipeline。

相关配置文件

CodeBuild用buildspec.yml

version: 0.2
phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker pull 889801477235.dkr.ecr.ap-south-1.amazonaws.com/node-15-slim
      - docker tag 889801477235.dkr.ecr.ap-south-1.amazonaws.com/node-15-slim node:15-slim
      - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
      - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
      - echo $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
      - echo $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG

CodeDeploy用buildspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ec2-user/First-Alert_Backend
hooks:
  AfterInstall:
    - location: build.sh
      timeout: 400
      runas: root

build.sh

#!/bin/bash
docker stop first_alert_backend
docker rm first_alert_backend
docker pull 889801477235.dkr.ecr.ap-south-1.amazonaws.com/first_alert_backend
docker tag 889801477235.dkr.ecr.ap-south-1.amazonaws.com/first_alert_backend first_alert_backend
docker run -d --network first_alert_network --link first_alert_mariadb:db --name first_alert_backend first_alert_backend 
docker image rm 889801477235.dkr.ecr.ap-south-1.amazonaws.com/first_alert_backend

内容的提问来源于stack exchange,提问作者Mohamed Anser Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 04:25:39