带有更新映像的AWS Deploy ECS

时间:2018-08-18 01:10:49

标签: amazon-web-services continuous-deployment amazon-ecs

似乎必须为每个服务更新提供新的完整任务定义。即使在大多数情况下,新部署只包括对基础docker映像之一的更新

虽然这可以理解为核心架构选择。这很麻烦。由于任务定义的完整JSON规范非常复杂,是否有命令行选项可以使此操作更容易?

现在,开发人员需要提供复杂的脚本和部署流程,以在其CI / CD流程中实现此相对常规的任务

我看到了对此HereHere的尝试。这些解决方案似乎并非在所有情况下都有效(例如,对于Fargate发射)

我知道,如果更新的图像使用相同的标签,此问题将变得更加容易,但是在开发文化中,重视可重复性和可听性的问题根本不是一个合理的选择

除了同时利用AWS API和JSON操作库之外,没有别的选择吗?

编辑:该项目似乎做得不错https://github.com/fabfuel/ecs-deploy

2 个答案:

答案 0 :(得分:0)

我找到了几种方法

  1. 正如我的评论中所述,请在Github链接上使用 ecs-deploy 脚本

  2. 通过awscli上的--generate-cli-skeleton选项创建任务定义。 填写除 execution-rule-arn task-role-arn image

  3. 之外的所有详细信息

无法填写这些内容,因为它们会随您要部署到的每个提交或每个环境而改变

将此框架提交给 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)