【问题标题】:Docker Continuous Integration with AWSDocker 与 AWS 的持续集成
【发布时间】:2017-06-12 17:45:11
【问题描述】:

我目前正在尝试使用 CodePipeline 自动化我们的开发流程。我的 docker 应用程序从 Source(Github) -> Builds(AWS CodeBuild) -> Deploy 中获取。在最终部署过程中,我无法修改任务定义和重新启动集群任务。我知道我需要一个 CloudFormation 模板来执行这些操作,但没有太多关于如何使用 CloudFormation 完成部署过程的文档(修改我的任务定义和更新我的任务)。有没有其他方法可以通过 AWS 自主部署我的容器?

【问题讨论】:

  • 你部署在哪里? Amazon EC2 Container Service 可以非常轻松地部署 Docker 容器,尽管需要编写一些脚本来更新服务。
  • 我正在尝试部署到 EC2 容器服务。我知道我必须更新任务定义并将服务指向已部署的新映像。是否有现有模板允许我触发 CloudFormation 来为我更新服务?

标签: amazon-web-services docker continuous-integration containers amazon-data-pipeline


【解决方案1】:

在使用不同方法反复试验后,更新 ECS 任务定义和服务的最佳方式是通过 AWS CodeBuild 在 buildspec.yml 的 post_build 部分中的 AWS CLI 直接更新它们。您甚至可以使用使用提交 ID 设置的环境变量来跟踪每个图像的标签!

【讨论】:

    【解决方案2】:

    如果您从 CloudFormation 部署原始服务,那么 CloudFormation 可以非常轻松地将新的任务定义部署到 ECS。

    下面是 CloudFormation 如何为您将服务部署到 EC2 容器服务上的一个很好的开端:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-ecs.html

    从 CloudFormation 部署所有内容后,您有 2 个部署选项: 1) 使用您需要的新部署部分更新 CloudFormation 模板,它将为您创建一个更改集并更新您的堆栈。 2)只使用CloudFormation来部署服务,并将任务定义作为参数。这将允许您只修改堆栈的输入,而不是每次都更新整个事物。

    当您在堆栈中更新 CloudFormation 时,它会自动尝试为您执行蓝/绿部署。

    【讨论】:

    • 感谢戴维斯的帮助。只是为了重新迭代,我应该使用这个模板来管理我的 ECS 实例/容器/图像,并在我的管道中使用它。但是无论如何我可以修改这个脚本,或者是否有任何现有的脚本可以重新启动我的任务以指向 :latest 图像?
    • 我过去的做法是使用一个 CF 模板来构建 ECS 集群,并为我要部署的每个服务使用一个模板。当您想将您的服务更新为最新的任务定义/docker 映像时,您可以将 CF 更改为指向最新的 ECR 映像/任务定义(无论您将哪个设置为模板的参数)。然后 CF 将为您部署它。您可以从控制台或通过 CLI 和脚本到 CI/CD 管道中执行此操作。我个人更喜欢将 ECR 图像作为参数,因为它会为您更新和重新部署任务定义
    • 我想我的所有部分都在一起了,我唯一缺少的是一个 CF 模板,它将在成功构建后将我的任务定义指向最新版本,感谢您的帮助!跨度>
    【解决方案3】:

    对于您描述的场景,您可能想试试这个示例https://github.com/awslabs/ecs-refarch-continuous-deployment

    【讨论】:

    • 感谢您的帮助!不确定您之前是否使用过,但 service.yaml 脚本是否允许重新定义任务定义以指向最新的映像构建?
    猜你喜欢
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多