AWS CodePipeline:如何确定部署阶段的 ECS Fargate 任务是否已完成容器中的进程执行?

AWS CodePipeline: how to find out if deployment stage's ECS Fargate task is finished executing proccesses in containers?

我有一个具有两个部署阶段的 AWS CodePipeline:

  1. 部署到 ECS Fargate 任务(测试环境)。
  2. 部署到ECS Fargate任务(实际环境)。

第一个部署阶段(测试阶段)有带有执行测试入口点的容器。

我的问题是,只有当第一个(测试)fargate 任务已完成容器中的所有进程并停止它们时,我才想进入第二个部署阶段。

到目前为止,我已经尝试使用命令 'aws ecs run-task' 将第一个 ECS Fargate 任务的启动移动到 buildspec.yml,它会启动、完成工作然后自行终止,这是需要的行为。但是我想停止整个管道,直到测试没有完成。

您可以在 TestDeploy 和 Deploy 阶段之间多使用一个阶段进行审批。

  1. 管道在到达批准操作时停止。如果操作配置中包含 Amazon SNS 主题 ARN,则会向 Amazon SNS 主题发布通知,并向该主题或订阅的终端节点的任何订阅者发送消息,并带有 link 以查看控制台中的批准操作。

  2. 审批人检查目标 URL 并审核评论(如果有)。

  3. 审批人使用控制台、CLI 或 SDK,提供摘要评论并提交回复:

    • 已批准:管道执行恢复。
    • 已拒绝:阶段状态更改为"Failed"并且管道执行不会恢复。

如果在 7 天内未提交回复,则操作标记为 "Failed."

article 表示您可以使用 docker-compose 作为 prebuild 操作在构建机器上部署容器,然后在 build 操作中 运行 测试 运行ner 命令(npm 测试)。如果测试失败,这应该使 deploy test 阶段失败,如果测试通过,则通过,然后让管道继续。