Merge pull request #95 from codeit-monew/feature/#93 #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: π Deploy to AWS ECS (Monew) | |
| on: | |
| push: | |
| branches: | |
| - main | |
| permissions: | |
| contents: read | |
| id-token: write | |
| env: | |
| AWS_REGION: ap-northeast-2 | |
| ECR_REPOSITORY: monew-repo | |
| ECS_CLUSTER: monew-cluster | |
| ECS_SERVICE: monew-service | |
| ECS_TASK_DEFINITION: monew-task | |
| CONTAINER_NAME: monew-app | |
| jobs: | |
| deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: π¦ Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: π Configure AWS credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| aws-region: ${{ env.AWS_REGION }} | |
| role-to-assume: ${{ secrets.AWS_ROLE_ARN }} | |
| role-session-name: github-actions | |
| - name: π Login to Amazon ECR | |
| id: login-ecr | |
| uses: aws-actions/amazon-ecr-login@v2 | |
| - name: π οΈ Build and push Docker image | |
| env: | |
| ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} | |
| run: | | |
| echo "π¨ Building Docker image..." | |
| docker build -t $ECR_REGISTRY/${{ env.ECR_REPOSITORY }}:latest . | |
| docker push $ECR_REGISTRY/${{ env.ECR_REPOSITORY }}:latest | |
| - name: π Download current ECS Task Definition | |
| run: | | |
| aws ecs describe-task-definition \ | |
| --task-definition "$ECS_TASK_DEFINITION" \ | |
| --query taskDefinition \ | |
| --output json > task-definition.json | |
| - name: π§© Update Task Definition with new image | |
| run: | | |
| NEW_IMAGE="${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}:latest" | |
| echo "β Updating container image to $NEW_IMAGE" | |
| jq --arg IMAGE "$NEW_IMAGE" \ | |
| '.containerDefinitions[0].image = $IMAGE' \ | |
| task-definition.json > new-task-definition.json | |
| - name: π Register new ECS Task Definition | |
| id: register-task | |
| run: | | |
| NEW_TASK_DEF_ARN=$(aws ecs register-task-definition \ | |
| --cli-input-json file://new-task-definition.json \ | |
| --query "taskDefinition.taskDefinitionArn" \ | |
| --output text) | |
| echo "β New Task Definition ARN: $NEW_TASK_DEF_ARN" | |
| echo "NEW_TASK_DEF_ARN=$NEW_TASK_DEF_ARN" >> $GITHUB_ENV | |
| - name: π Deploy new Task Definition to ECS Service | |
| run: | | |
| echo "Deploying new Task Definition to ECS..." | |
| aws ecs update-service \ | |
| --cluster $ECS_CLUSTER \ | |
| --service $ECS_SERVICE \ | |
| --task-definition $NEW_TASK_DEF_ARN | |
| aws ecs wait services-stable \ | |
| --cluster $ECS_CLUSTER \ | |
| --services $ECS_SERVICE | |
| echo "β ECS Service update triggered successfully!" | |
| - name: β Confirm Deployment (with validation) | |
| run: | | |
| echo "π Checking ECS deployment status..." | |
| STATUS_JSON=$(aws ecs describe-services \ | |
| --cluster $ECS_CLUSTER \ | |
| --services $ECS_SERVICE) | |
| PRIMARY_DEPLOYMENT=$(echo "$STATUS_JSON" | jq -r '.services[0].deployments[] | select(.status=="PRIMARY")') | |
| DESIRED_COUNT=$(echo "$PRIMARY_DEPLOYMENT" | jq -r '.desiredCount') | |
| RUNNING_COUNT=$(echo "$PRIMARY_DEPLOYMENT" | jq -r '.runningCount') | |
| FAILED_COUNT=$(echo "$PRIMARY_DEPLOYMENT" | jq -r '.failedTasks') | |
| echo "Desired: $DESIRED_COUNT, Running: $RUNNING_COUNT, Failed: $FAILED_COUNT" | |
| if [ "$RUNNING_COUNT" -lt "$DESIRED_COUNT" ]; then | |
| echo "β Deployment not yet stable β runningCount < desiredCount" | |
| exit 1 | |
| fi | |
| if [ "$FAILED_COUNT" != "0" ]; then | |
| echo "π¨ Deployment has failed tasks!" | |
| exit 1 | |
| fi | |
| echo "β Deployment verified successfully!" | |