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

如何在CodePipeline/CodeDeploy中实现独立于构建的手动ECS部署?

单步骤手动ECS部署方案(脱离构建环节)

针对你的需求,推荐两种轻量方案,都是手动触发、支持输入镜像标签、单步骤完成部署,完全避免CodePipeline多步骤审批导致的任务堆积问题,同时替代繁琐的手动修改任务定义操作:

方案一:CodePipeline参数化单步骤流水线

这个方案用CodePipeline实现,支持手动输入镜像标签和目标环境,直接执行部署:

1. 创建无源流水线

创建CodePipeline时,跳过“源阶段”配置(因为不需要关联构建或代码仓库),直接进入部署阶段设置。

2. 启用参数化触发

在流水线的“设置”中开启参数化触发,添加以下必填/可选参数:

  • IMAGE_TAG:必填,输入要部署的ECR镜像标签
  • TARGET_ENV:可选,指定部署目标环境(如qa/dev/prod)

3. 部署阶段二选一配置

方式A:用ECS原生部署操作(无需自定义脚本)

在部署阶段选择Amazon ECS部署操作,配置:

  • 目标ECS集群、服务
  • 在“任务定义补丁”中使用参数化JSON替换镜像标签,示例:
    [
      {
        "op": "replace",
        "path": "/containerDefinitions/0/image",
        "value": "你的ECR仓库地址:${IMAGE_TAG}"
      }
    ]
    
    这里的${IMAGE_TAG}会自动引用触发流水线时输入的参数,CodePipeline会自动完成任务定义更新和服务部署。

方式B:用CodeBuild执行你的yq脚本

如果需要更灵活的自定义逻辑,选择AWS CodeBuild操作:

  1. 创建CodeBuild项目,配置环境(选择带awscli的镜像,或在构建脚本中安装yq:apt-get install yq -y 或 brew install yq)
  2. 编写构建脚本,读取流水线传递的参数:
    # 按目标环境匹配集群/服务/任务定义
    case $TARGET_ENV in
      qa)
        CLUSTER="qa-cluster"
        SERVICE="qa-service"
        TASK_DEF="qa-task-def"
        ;;
      prod)
        CLUSTER="prod-cluster"
        SERVICE="prod-service"
        TASK_DEF="prod-task-def"
        ;;
      *)
        echo "无效环境:$TARGET_ENV"
        exit 1
        ;;
    esac
    
    # 拉取现有任务定义
    aws ecs describe-task-definition --task-definition $TASK_DEF --query 'taskDefinition' > task-def.json
    
    # 用yq修改镜像标签
    yq eval ".containerDefinitions[0].image = \"你的ECR仓库地址:$IMAGE_TAG\"" task-def.json > updated-task-def.json
    
    # 注册新任务定义并更新服务
    NEW_TASK_DEF_ARN=$(aws ecs register-task-definition --cli-input-json file://updated-task-def.json --query 'taskDefinition.taskDefinitionArn' --output text)
    aws ecs update-service --cluster $CLUSTER --service $SERVICE --task-definition $NEW_TASK_DEF_ARN
    
  3. 在CodePipeline的部署操作中,将IMAGE_TAG和TARGET_ENV参数传递给CodeBuild项目。

方案二:SSM Run Command轻量部署(无需流水线)

如果不需要流水线的日志追踪,用AWS Systems Manager Run Command更简易:

  1. 创建SSM文档,包含你的yq部署脚本,定义参数:IMAGE_TAG、TARGET_ENV、CLUSTER_NAME、SERVICE_NAME等
  2. 在SSM控制台手动触发Run Command,输入对应参数即可执行部署,所有操作在SSM中留痕。

核心优势

  • 完全脱离构建环节:每次部署仅需指定已推送到ECR的镜像标签
  • 无任务堆积:每次手动触发都是独立执行,完成后直接结束,无需等待审批
  • 版本清晰:触发时明确输入镜像标签和目标环境,不会混淆版本部署路径

内容的提问来源于stack exchange,提问作者Andrei Dascalu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:05:20