gpt4 book ai didi

amazon-ecs - 如何在 CodePipeline 中处理 ECS 部署以更改任务定义

转载 作者:行者123 更新时间:2023-12-04 11:50:40 33 4
gpt4 key购买 nike

我正在使用两个容器部署 ECS Fargate 任务:1 个反向代理 nginx 和 1 个 python 服务器。对于每个我有一个 ECR 存储库,我有一个 CI/CD CodePipeline 设置
CodeCommit -> CodeBuild -> CodeDeploy
此流程适用于简单的代码更改。但是如果我想添加另一个容器怎么办?我当然可以更新我的 buildspec.yml添加容器的构建,但我还需要 1) 更新我的任务定义,以及 2) 将此任务定义分配给我的服务。

问题:

1) 如果我在 CodeBuild 阶段使用 CLI 创建新的任务定义并将其与我的服务相关联,这不会触发部署吗?然后我的 CodeDeploy 会尝试再次部署,所以我最终会部署两次?

2) 这种方法最终会创建一个新的任务定义并在每次部署时更新服务。这很糟糕吗?我是否应该有一些逻辑来拉下最新的任务修订版并将 JSON 与 CodeCommit 版本进行比较,并且仅在存在差异时才进行更新?

谢谢!

最佳答案

CodePipeline 的 ECS Job Worker 复制任务定义并更新“imagedefinitions.json”文件中指定的容器的 Image 和 ImageTag,然后使用此新 TaskDef 更新 ECS 服务。作业 worker 无法在任务定义中添加新容器。

If I use the CLI in my CodeBuild stage to create a new task definition and associate it with my service, won't this trigger a deploy? And then my CodeDeploy will try to deploy again, so I'll end up deploying twice?



我不这么认为。是否有以这种方式触发 CodeDeploy 的 CloudWatch 事件规则?

This approach ends up creating a new task definition and updating the service on every single deploy. Is this bad? Should I have some logic to pull down the LATEST task revision and diff the JSON from CodeCommit version and only update if there is a difference?



每次部署发生时,ECS 部署作业工作器都会创建一个新的任务定义修订,所以如果这是官方行为,我不会认为它是坏的。

我会质疑为什么您需要在部署期间在运行时将新容器添加到您的任务定义中。您的任务定义通常应该较少修改,并且只有其中的 image:tag 应该定期修改 - ECS Deploy 操作可以帮助您实现这一点。

关于amazon-ecs - 如何在 CodePipeline 中处理 ECS 部署以更改任务定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58455503/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com