【问题标题】:Why does CodePipeline require an `imagedefinitions.json` when ECS task definitions already have this?当 ECS 任务定义已经有这个时,为什么 CodePipeline 需要一个`imagedefinitions.json`?
【发布时间】:2020-02-14 00:09:42
【问题描述】:

好的,所以我有一个非常普通的 CodePipeline

CodeCommit -> Build Docker images -> CodeDeploy to ECS

buildspec.yml 文件中,AWS requires outputting imagedefinitions.json 作为工件,CodePipeline 可以使用它来将容器名称映射到 ECR 图像 URL。

这是在您的buildspec.yml 中经常被引用的示例:

printf '[{"name":"MyService","imageUri":"%s"}]' $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/myservice/app:latest > imagedefinitions.json

但这对我来说似乎完全多余。在 ECS 任务定义中,我们的containerDefinitions 下可以有以下内容:

"containerDefinitions": [
    {
      "name": "MyService",
      "image": "123456789.dkr.ecr.us-east-1.amazonaws.com/myservice/app:latest"
     }, 
     ...
]

为什么,为了使用 CodePipeline 对 ECS 任务进行 CodeDeploy,我们必须提供 ECS 任务定义中已经指定的信息?在这里消除对工件(以及用于存储所述工件的 S3 存储桶)的需求会更加清洁!

也许我不了解 CodeDeploy/ECS 的一些基础知识。

【问题讨论】:

    标签: amazon-ecs aws-code-deploy aws-codepipeline


    【解决方案1】:

    你说得很好,但是在生产系统中使用“:latest”来识别/检索图像通常不是一个好主意,主要是因为标签不是确定性的,可能会导致意外。互联网上有很多文章讨论了这种反模式,例如[1]。

    为了回答您的问题,“imagedefinitions.json”的想法是在任务定义中识别容器的更新图像。它并不打算一直使用 ':latest' 标签。

    [1]https://vsupalov.com/docker-latest-tag/

    【讨论】:

    • 关于在使用 CodePipekine 时如何命名标签的任何最佳实践建议,而您只是在 git 推送以触发新部署?
    • 那么问题是为什么codepipeline在设置过程中询问图像标签,它说mage tag - optional Choose the image tag that triggers your pipeline when a change occurs in the image repository.If an image tag is not selected, defaults to latest为什么我们需要指定标签(或者如果根本不需要,要求使用latest
    • 当 CodePipeline 进行滚动 ECS 部署(不是 B/G)时,它会创建一个新的任务定义。它需要在这个任务定义中放置一个图像和一个标签。该标签是可选的,因为如果未提供,CodePipeline 将使用“最新”作为标签。大多数情况下,推送到 Image repos 的新图像都被标记为 latest,所以这是可行的,但无论如何它都是反模式。
    • 如果我使用 ECR 作为源而不使用构建阶段,我应该在哪里上传上述 imageDefinitions.json 文件?
    【解决方案2】:

    printf '[{"name":"MyService","imageUri":"%s"}]' MyService 的名字是什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多