From 1e985c30ba1be030f2a965724f4d0d22cf9a18a1 Mon Sep 17 00:00:00 2001 From: ImJWoo Date: Mon, 10 Aug 2026 00:02:43 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(deploy):=20ECS=20=EB=A1=A4?= =?UTF-8?q?=EB=B0=B1=20=EC=98=A4=ED=8C=90=20=EB=B0=8F=20=ED=83=9C=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=20=EA=B8=B0=EC=A4=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ecs.yml | 52 ++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ecs.yml b/.github/workflows/ecs.yml index ad3b850..68b5ca7 100644 --- a/.github/workflows/ecs.yml +++ b/.github/workflows/ecs.yml @@ -59,11 +59,23 @@ jobs: id: ecr uses: aws-actions/amazon-ecr-login@v2 - - name: Describe current Task Definition + - name: Describe Task Definition currently serving production if: steps.gate.outputs.GO == 'true' run: | + CURRENT_TD_ARN=$(aws ecs describe-services \ + --cluster "${{ env.ECS_CLUSTER }}" \ + --services "${{ env.ECS_SERVICE }}" \ + --query 'services[0].taskDefinition' \ + --output text) + + if [ -z "$CURRENT_TD_ARN" ] || [ "$CURRENT_TD_ARN" = "None" ]; then + echo "Unable to resolve the task definition currently used by the ECS service." + exit 1 + fi + + echo "Using production task definition as deployment base: $CURRENT_TD_ARN" aws ecs describe-task-definition \ - --task-definition "${{ env.TASK_FAMILY }}" \ + --task-definition "$CURRENT_TD_ARN" \ --query 'taskDefinition' > td.json - name: Patch image & ensure ARM64 platform @@ -96,23 +108,35 @@ jobs: - name: Wait for deployment (timeout 10m) if: steps.gate.outputs.GO == 'true' - id: wait - continue-on-error: true run: | timeout 600 aws ecs wait services-stable \ --cluster "${{ env.ECS_CLUSTER }}" \ - --services "${{ env.ECS_SERVICE }}" || echo "WAIT_FAILED=true" >> $GITHUB_OUTPUT + --services "${{ env.ECS_SERVICE }}" - - name: Summary + - name: Verify the new Task Definition is serving production if: steps.gate.outputs.GO == 'true' run: | - if [ "${{ steps.wait.outputs.WAIT_FAILED }}" == "true" ]; then - echo "### ❌ ECS Deploy Failed" >> $GITHUB_STEP_SUMMARY + EXPECTED_TD_ARN="${{ steps.register.outputs.TASK_DEF_ARN }}" + ACTIVE_TD_ARN=$(aws ecs describe-services \ + --cluster "${{ env.ECS_CLUSTER }}" \ + --services "${{ env.ECS_SERVICE }}" \ + --query 'services[0].taskDefinition' \ + --output text) + + if [ "$ACTIVE_TD_ARN" != "$EXPECTED_TD_ARN" ]; then + echo "ECS deployment did not become production. The deployment may have rolled back." + echo "Expected: $EXPECTED_TD_ARN" + echo "Active: $ACTIVE_TD_ARN" exit 1 - else - echo "### ✅ ECS Deploy Completed (ARM64)" >> $GITHUB_STEP_SUMMARY - echo "- Cluster: \`${{ env.ECS_CLUSTER }}\`" - echo "- Service: \`${{ env.ECS_SERVICE }}\`" - echo "- TD: \`${{ steps.register.outputs.TASK_DEF_ARN }}\`" - echo "- Image: \`${PAYLOAD_IMAGE_URI}\`" fi + + echo "Verified production task definition: $ACTIVE_TD_ARN" + + - name: Summary + if: steps.gate.outputs.GO == 'true' + run: | + echo "### ✅ ECS Deploy Completed (ARM64)" >> $GITHUB_STEP_SUMMARY + echo "- Cluster: \`${{ env.ECS_CLUSTER }}\`" >> $GITHUB_STEP_SUMMARY + echo "- Service: \`${{ env.ECS_SERVICE }}\`" >> $GITHUB_STEP_SUMMARY + echo "- TD: \`${{ steps.register.outputs.TASK_DEF_ARN }}\`" >> $GITHUB_STEP_SUMMARY + echo "- Image: \`${PAYLOAD_IMAGE_URI}\`" >> $GITHUB_STEP_SUMMARY