我正在开发一个部署到AWS中的Bitbucket管道。该管道构建一个Docker映像,将其推送到ECR,并最终将其部署到ECS Fargate中。在该管道中,我使用此Bitbucket pipe构建并推送到Docker映像。此管道具有一个属性TAGS
,我在其中指定了'${BITBUCKET_COMMIT}'
,因此每次构建映像并推送到ECR时,映像将使用commit ID作为映像的标记。
当涉及到部署Fargate的步骤时,我遇到了一个拦截器。我使用这个pipe部署到Fargate。这个管道有一个TASK_DEFINITION
的属性,需要在每次部署时指定该属性。正在部署的映像有一个不同的标记。task_definition
文件是存储库中的一个JSON文件。在该文件中有一个用于映像的JSON对象。以下是包含所讨论对象的文件:
{
"image": "xxxxxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/image:latest"
}
我曾尝试将此JSON对象更改为
{
"image": "xxxxxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/image:${BITBUCKET_COMMIT}"
}
但这似乎破坏了整个JSON对象。我尝试过看看是否有一种解决方案可以在JSON值中指定变量,但似乎只有函数调用可以在这种上下文中完成。如果有人能给我提供正确的方向来解决这个问题,我将不胜感激。
1条答案
按热度按时间xuo3flqw1#
或者:别这样!
用你的提交ID发布所有图片,这对跟踪很好。
对于部署管道,使用部署环境slug重新标记已经公开的映像,并将其用于任务定义:
我使用
$BITBUCKET_BUILD_NUMBER
而不是$BITBUCKET_COMMIT
,因为我可能在同一个提交上运行不同的管道,并且还创建了一个更容易被人类理解的序列。但这里的大想法是用部署弹头重新标记图像。