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

如何使用特定标签版本更新ECS Fargate服务?

如何用特定版本的环境标签镜像更新ECS Fargate服务

ECS默认仅通过任务定义中的镜像字符串判断是否需要更新,同一标签(如test)指向的镜像更新后,ECS不会自动识别。要让服务使用你刚推送的、关联特定版本的test环境镜像,可通过以下两种可靠方式实现:

方法一:通过镜像SHA摘要精准指定(推荐)

镜像SHA摘要唯一对应一个镜像版本,能彻底避免标签覆盖带来的不确定性,步骤如下:

    1. 在Jenkins中获取test标签对应的镜像SHA
      执行AWS CLI命令:
    IMAGE_SHA=$(aws ecr describe-images --repository-name <ecrrepo> --image-ids imageTag=test --query 'imageDetails[0].imageDigest' --output text)
    
    1. 生成并注册新的任务定义
      基于现有任务定义,将镜像地址替换为带SHA的格式:
    # 导出当前任务定义为JSON
    aws ecs describe-task-definition --task-definition <你的任务定义名称> | jq '.taskDefinition' > current-task-def.json
    # 修改镜像字段为带SHA的地址
    jq --arg image "<baseurl>/<ecrrepo>@$IMAGE_SHA" '.containerDefinitions[0].image = $image' current-task-def.json > new-task-def.json
    # 注册新任务定义
    aws ecs register-task-definition --cli-input-json file://new-task-def.json
    
    1. 更新ECS服务
    aws ecs update-service --cluster <集群名称> --service <服务名称> --task-definition <新生成的任务定义名称/ARN>
    

方法二:强制触发服务部署拉取最新标签镜像

若无需精准指定SHA,仅需让ECS拉取最新的test标签镜像,可通过强制部署实现:

  • 直接触发服务强制更新,ECS会重新启动任务并拉取最新镜像:
    aws ecs update-service --cluster <集群名称> --service <服务名称> --force-new-deployment
    
    注意:若任务定义未变更,此命令会强制重新部署现有任务定义对应的容器,启动时会拉取最新的test标签镜像。

关键提示

  • 优先使用SHA指定镜像,避免后续镜像推送覆盖test标签导致服务意外更新
  • Jenkins Pipeline可将上述命令串联,实现从镜像推送、任务定义更新到服务部署的全自动化
  • 控制台操作时,可手动修改任务定义的镜像地址为[baseurl]/[ecrrepo]@[SHA值],再更新服务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:35:35