CodePipeline:taskdef.json 和 appsec.yaml 的用途是什么?

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

对我来说,使用 CodePipeline 的全部意义在于使用 CodeDeploy 自动部署 ECS 服务(蓝/绿部署)。

CodePipeline 有以下阶段:

  • 包含 Bitbucket webhook 的“源”。

  • “Build”包含 CodeBuild 步骤(在 ECR 上构建并推送 Docker 映像)。

  • “部署”包含 ECS(蓝色/绿色),将使用 CodeDeploy 部署设计的服务。

我不明白的是,在我的例子中,taskdef.json 和 appsec.yaml 的目的。

我仅手动执行的操作(因此当前没有 CodePipeline)是使用相同的任务定义重新部署 ECS 服务。我实际上不必每次都更新我的任务定义,因为我推送的 docker 镜像始终具有相同的标签(暂存或生产),所有其他镜像都未标记,因此只有一个可用。

那么为什么必须输入这些文件,即使当我手动输入时,我也不会更改任何内容,只需不断单击“下一步”?

另外,我如何将其包含在 CodeBuild 步骤中?

amazon-web-services amazon-ecs aws-codepipeline aws-codebuild aws-code-deploy
3个回答
0
投票

在管道上,您可以使用 AWS CodeCommit 输入 taskdef.json 文件以及 appspec.yml。每次部署时,CodePipeline 都会获取最新的可用输入。

例如,您更改了环境变量值。这在taskdef.json 文件中进行。您需要做的就是使用新版本的 taskdef.json 推送提交。这将使用新的 taskdef.json 触发新的部署,并使用带有您在 CodePipilie/CodeDeploy 上指定的标签的最新 ECR 映像。

本教程介绍了如何将所有内容组合在一起:https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-ecs-ecr-codedeploy.html


0
投票

我终于找到怎么做了。我首先做的是将 taskdef.json 和 appspec.yaml 文件包含在我的 Git 项目中。由于我不需要“自动更新”或“生成”这些文件,因此我只是采用 JSON 格式获取最后一个任务定义,并将其放入 taskdef.json 中。

对于 appspec.yaml,您可以在 ECS 服务上进行手动部署时以 JSON 格式获取它,在最后一页上总结了所有内容。

然后,您需要更新 CodeBuild 项目以将两个工件上传到 S3 上,然后在管道中,部署任务可以使用这些工件。

这个网站帮助我很好地设置了一切。


0
投票

如果有人需要它并且正在使用 CodeBuild,另一种选择是动态创建它们:

文件:buildspec.yml

版本:0.2
阶段:
  预构建:
    命令:
      - COMMIT_HASH = $(回显$ CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=最新}
  建造:
    命令:
      - docker build --platform linux/amd64 -f ./Dockerfile -t $REPOSITORY_URL:$IMAGE_TAG 。
  构建后:
    命令:
      - aws ecr 获取登录密码 --region us-east-1 | docker登录--用户名AWS--密码-stdin $REPOSITORY_URL
      - docker 推送 $REPOSITORY_URL:$IMAGE_TAG
      - >
        aws ecs 描述任务定义 --任务定义 cv-dev-任务定义-web |
          jq '.taskDefinition' | jq '.taskDefinition' |
          jq 'del(.taskDefinitionArn,.revision,.registeredAt,.registeredBy,.requiresAttributes)' |
          jq '.containerDefinitions[0].image = "$REPOSITORY_URL:$IMAGE_TAG"' > task-definition.json
      - >
        回声'
          版本:0.0
          资源:
            - 目标服务:
                类型:AWS::ECS::服务
                特性:
                  任务定义:
                  负载均衡器信息:
                    容器名称:“web”
                    集装箱港口:80
                  容量提供商策略:
                    - 容量提供商:“$ECS_CAPACITY_PROVIDER”
                      基数:1
                      重量:100
        ' > appspec.yml
文物:
  文件:
    -appspec.yml
    - 任务定义.json

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