【发布时间】:2021-03-29 08:01:15
【问题描述】:
我在 ECS 上有一项服务,其中一项任务包含 2 个容器。这两个容器具有相同的图像,但入口点不同。
我正在尝试设置一个管道,在测试后,获取推送到注册表的图像并更新 ECS 上的服务。
我为此创建了一个脚本,但它只更新了其中一个容器。因此,只有一个容器是最新的更改。如何使更改从两个容器中获取?
任务定义:
register_definition() {
TASK_DEFINITION=$(aws ecs describe-task-definition --task-definition ${ECS_TASK_DEFINITION} | jq '.taskDefinition')
current_revision=$(echo ${TASK_DEFINITION} | jq '.taskDefinitionArn')
echo "Current revision: ${current_revision}"
extra_keys=".compatibilities, .status, .taskDefinition, .revision, .requiresAttributes, .taskDefinitionArn"
echo "Deleting extra keys... ${extra_keys}"
TASK_DEFINITION=$(echo ${TASK_DEFINITION} | jq "del(${extra_keys})")
prev_image=$(echo ${TASK_DEFINITION} | jq ".containerDefinitions[0].image")
echo "Replacing ${prev_image} with ${IMAGE}"
UPDATED_TASK_DEFINITION=$(echo ${TASK_DEFINITION} | jq ".containerDefinitions[0].image = \"${IMAGE}\"")
new_revision=$(aws ecs register-task-definition --cli-input-json "${UPDATED_TASK_DEFINITION}")
new_revision_arn=$(echo ${new_revision} | jq '.taskDefinition.taskDefinitionArn')
export NEW_VERSION=$(echo ${new_revision} | jq '.taskDefinition.revision')
echo "New revision ${NEW_VERSION} created"
}
部署到 ecs:
deploy(){
echo "Update service task revision"
aws ecs update-service --cluster "${ECS_CLUSTER_NAME}" --service "${ECS_SERVICE_NAME}" --task-definition "${ECS_TASK_DEFINITION}:${NEW_VERSION}"
非常感谢任何帮助。
【问题讨论】:
-
感谢您在这里分享您的脚本!帮了我很多!
标签: continuous-integration devops amazon-ecs continuous-deployment