GitHub Actions Workflow for Docker ECR Deployment

This snippet demonstrates a GitHub Actions workflow that builds a Docker image, pushes it to Amazon ECR, and updates an ECS service. It includes AWS CLI setup and authentication steps using secrets for a secure configuration. An excellent example for automating cloud deployments!
 avatar
user_0659028
yaml
2 months ago
2.2 kB
11
Indexable
name: Build, Push Docker Image to ECR and Update ECS Service

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

    - name: Set up AWS CLI
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ${{ secrets.AWS_REGION }}

    - name: Log in to Amazon ECR
      run: |
        aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com

    - name: Build Docker image
      run: docker build -t ${{ secrets.ECR_REPOSITORY }} .

    - name: Tag Docker image
      run: docker tag ${{ secrets.ECR_REPOSITORY }}:latest ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/${{ secrets.ECR_REPOSITORY }}:latest

    - name: Push Docker image to ECR
      run: |
        docker push ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/${{ secrets.ECR_REPOSITORY }}:latest

    - name: Get current desired count of ECS service
      id: get_desired_count
      run: |
        CURRENT_DESIRED_COUNT=$(aws ecs describe-services \
          --cluster ${{ secrets.ECS_CLUSTER_NAME }} \
          --services ${{ secrets.ECS_SERVICE_NAME }} \
          --query "services[0].desiredCount" \
          --output text)
        echo "current_desired_count=$CURRENT_DESIRED_COUNT" >> $GITHUB_ENV

    - name: Scale down ECS service to 0
      run: |
        aws ecs update-service \
          --cluster ${{ secrets.ECS_CLUSTER_NAME }} \
          --service ${{ secrets.ECS_SERVICE_NAME }} \
          --desired-count 0

    - name: Scale up ECS service to original desired count
      run: |
        aws ecs update-service \
          --cluster ${{ secrets.ECS_CLUSTER_NAME }} \
          --service ${{ secrets.ECS_SERVICE_NAME }} \
          --desired-count ${{ env.current_desired_count }}
Leave a Comment