ECS sh 脚本 - 更新服务

ECS sh script - update service

我在 ECS 上有一个服务,它有一个任务和 2 个容器。 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}"

非常感谢任何帮助。

经过反复试验,我找到了答案。所以如果有人碰巧遇到同样的问题,这里是解决方案。

prev_image=$(echo ${TASK_DEFINITION} | jq ".containerDefinitions[0].image | jq ".containerDefinitions[1].image")

只需要在另一个容器中获取图像。