似乎必须为每个服务更新提供新的完整任务定义。即使在大多数情况下,新部署只包括对基础docker映像之一的更新
虽然这可以理解为核心架构选择。这很麻烦。由于任务定义的完整JSON规范非常复杂,是否有命令行选项可以使此操作更容易?
现在,开发人员需要提供复杂的脚本和部署流程,以在其CI / CD流程中实现此相对常规的任务
我看到了对此Here和Here的尝试。这些解决方案似乎并非在所有情况下都有效(例如,对于Fargate发射)
我知道,如果更新的图像使用相同的标签,此问题将变得更加容易,但是在开发文化中,重视可重复性和可听性的问题根本不是一个合理的选择
除了同时利用AWS API和JSON操作库之外,没有别的选择吗?
编辑:该项目似乎做得不错https://github.com/fabfuel/ecs-deploy
答案 0 :(得分:0)
我找到了几种方法
正如我的评论中所述,请在Github链接上使用 ecs-deploy 脚本
通过awscli上的--generate-cli-skeleton
选项创建任务定义。
填写除 execution-rule-arn , task-role-arn , image
无法填写这些内容,因为它们会随您要部署到的每个提交或每个环境而改变
将此框架提交给 git ,因此它是CI上工作空间的一部分
然后使用JSON遍历/解析库或实用程序(例如https://jqplay.org/)在构建时在CI上替换roleArn和图像名称
答案 1 :(得分:0)
使用https://github.com/fabfuel/ecs-deploy。
如果您只想更新现有任务的标签:
ecs deploy <CLUSTER NAME> <SERVICE NAME> --region <REGION NAME> --tag <NEW TAG>
例如 ecs deploy default web-service --region us-east-1 --tag v2.0
在您的ci / cd中,您使用git hash:
使用git rev-parse HEAD
,将返回类似d63c16cd4d0c9a30524c682fe4e7d417faae98c9
docker build -t image-name:$(git rev-parse HEAD) .
docker push image-name:$(git rev-parse HEAD)
并在任务上使用相同的标签:
ecs deploy default web-service --region us-east-1 --tag $(git rev-parse HEAD)