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!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