如何处理CodePipeline中的ECS部署以更改任务定义

问题描述 投票:0回答:1

我正在部署具有两个容器的ECS Fargate任务:1个反向代理nginx和1个python服务器。对于每个人,我都有一个ECR存储库,并且我有一个CI / CD CodePipeline,设置为

CodeCommit -> CodeBuild -> CodeDeploy

此流程适用于简单的代码更改。但是,如果我想添加另一个容器怎么办?我当然可以更新buildspec.yml以添加容器的构造,但我还需要1)更新我的任务定义,以及2)将此任务定义分配给我的服务。

问题:

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

2)这种方法最终会创建一个新的任务定义,并在每次部署时更新服务。这不好吗?我是否应该有一些逻辑来删除最新的任务修订,并从CodeCommit版本中区分JSON并仅在有区别的情况下进行更新?

谢谢!

amazon-ecs aws-code-deploy aws-codepipeline aws-codebuild
1个回答
0
投票

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

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

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

此方法最终会创建一个新的任务定义,并在每次部署时更新服务。这不好吗?我是否应该有一些逻辑来删除最新的任务修订,并从CodeCommit版本中区分JSON并仅在有区别的情况下进行更新?

每次部署时,ECS部署工作人员都会创建一个新的任务定义修订版,因此,如果这是官方行为,我不会认为这很糟糕。

我会问为什么在部署期间需要在运行时在任务定义中添加新容器。通常,您的任务定义应该减少修改的频率,并且应该定期修改其中的image:tag-ECS Deploy操作可以帮助您实现。

© www.soinside.com 2019 - 2024. All rights reserved.