Skip to content

Commit

Permalink
fixing cicd pipeline
Browse files Browse the repository at this point in the history
  • Loading branch information
parhamrahmani committed May 27, 2024
1 parent 7f221a6 commit d44f746
Showing 1 changed file with 28 additions and 37 deletions.
65 changes: 28 additions & 37 deletions .github/workflows/deploy-to-ec2.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# CI/CD pipeline to deploy a Flask app to AWS EC2 instances and Autoscaling EC2 instances
name: Build and Deploy to AWS

on:
Expand Down Expand Up @@ -35,14 +34,15 @@ jobs:
SPOTIFY_CLIENT_ID=${{ secrets.SPOTIFY_CLIENT_ID }}
SPOTIFY_SECRET_ID=${{ secrets.SPOTIFY_SECRET_ID }}
ENVIRONMENT=${{ secrets.ENVIRONMENT }}
- 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: Retrieve EC2 instance IP
- name: Retrieve EC2 instance IPs
id: get_instances_ips
run: |
aws ec2 describe-instances --filters "Name=tag:Name,Values=ec2-1" "Name=instance-state-name,Values=running" --query "Reservations[*].Instances[*].PublicIpAddress" --output text > ec2_instance_ip.txt
Expand All @@ -63,49 +63,40 @@ jobs:

- name: Update EC2 with new Docker image
run: |
ssh -o StrictHostKeyChecking=no -i /home/runner/.ssh/id_rsa ubuntu@${{ env.EC2_1_IP }} << EOF
docker pull ${{ secrets.DOCKER_HUB_USERNAME }}/flask-app-image-repository:latest
docker stop my-container || true
docker rm my-container || true
docker run -d --name my-container -p 80:5000 ${{ secrets.DOCKER_HUB_USERNAME }}/flask-app-image-repository:latest
EOF
ssh -o StrictHostKeyChecking=no -i /home/runner/.ssh/id_rsa ubuntu@${{ env.EC2_2_IP }} << EOF
docker pull ${{ secrets.DOCKER_HUB_USERNAME }}/flask-app-image-repository:latest
docker stop my-container || true
docker rm my-container || true
docker run -d --name my-container -p 80:5000 ${{ secrets.DOCKER_HUB_USERNAME }}/flask-app-image-repository:latest
EOF
ssh -o StrictHostKeyChecking=no -i /home/runner/.ssh/id_rsa ubuntu@${{ env.EC2_3_IP }} << EOF
docker pull ${{ secrets.DOCKER_HUB_USERNAME }}/flask-app-image-repository:latest
docker stop my-container || true
docker rm my-container || true
docker run -d --name my-container -p 80:5000 ${{ secrets.DOCKER_HUB_USERNAME }}/flask-app-image-repository:latest
for ip in ${{ env.EC2_1_IP }} ${{ env.EC2_2_IP }} ${{ env.EC2_3_IP }}; do
ssh -o StrictHostKeyChecking=no -i /home/runner/.ssh/id_rsa ubuntu@$ip << EOF
docker pull ${{ secrets.DOCKER_HUB_USERNAME }}/flask-app-image-repository:latest
docker stop my-container || true
docker rm my-container || true
docker run -d --name my-container -p 80:5000 ${{ secrets.DOCKER_HUB_USERNAME }}/flask-app-image-repository:latest
EOF
done
- name: Retrieve Autoscaling EC2 instance IDs
run: |
aws autoscaling describe-auto-scaling-instances --query "AutoScalingInstances[*].InstanceId" --output text > autoscaling_instance_ids.txt
echo "Autoscaling instance IDs: $(cat autoscaling_instance_ids.txt)"
- name: Retrieve Autoscaling EC2 server ips
- name: Retrieve Autoscaling EC2 instance IPs
id: get_autoscaling_instances_ips
run: |
aws ec2 describe-instances --instance-ids $(cat autoscaling_instance_ids.txt) --query "Reservations[*].Instances[*].PublicIpAddress" --output text > autoscaling_instance_ips.txt << EOF
aws ec2 describe-instances --instance-ids $(cat autoscaling_instance_ids.txt) --query "Reservations[*].Instances[*].PublicIpAddress" --output text > autoscaling_instance_ips.txt
echo "Autoscaling instance IPs: $(cat autoscaling_instance_ips.txt)"
ips_file="autoscaling_instance_ips.txt"
IFS=$'\n' read -d '' -r -a ips < "$ips_file"
for i in "${!ips[@]}"; do
echo "Auto_Instance_ID_$((i+1)): ${ids[i]}" >> $GITHUB_ENV
echo "Auto_Instance_IP_$((i+1)): ${ips[i]}" >> $GITHUB_ENV
echo "Auto_Instance_IP_$((i+1))=${ips[i]}" >> $GITHUB_ENV
done
EOF
- name: Update Autoscaling EC2 with new Docker image
run: |
aws ec2 describe-instances --instance-ids $(cat autoscaling_instance_ids.txt) --query "Reservations[*].Instances[*].PublicIpAddress" --output text > autoscaling_instance_ips.txt << EOF
run: |
ips_file="autoscaling_instance_ips.txt"
IFS=$'\n' read -d '' -r -a ips < "$ips_file"
for i in "${!ips[@]}"; do
ssh -o StrictHostKeyChecking=no -i /home/runner/.ssh/id_rsa ubuntu@${ips[i]} << EOF
docker pull ${{ secrets.DOCKER_HUB_USERNAME }}/flask-app-image-repository:latest
docker stop my-container || true
docker rm my-container || true
docker run -d --name my-container -p 80:5000 ${{ secrets.DOCKER_HUB_USERNAME }}/flask-app-image-repository:latest
EOF
done
for ip in "${ips[@]}"; do
ssh -o StrictHostKeyChecking=no -i /home/runner/.ssh/id_rsa ubuntu@$ip << EOF
docker pull ${{ secrets.DOCKER_HUB_USERNAME }}/flask-app-image-repository:latest
docker stop my-container || true
docker rm my-container || true
docker run -d --name my-container -p 80:5000 ${{ secrets.DOCKER_HUB_USERNAME }}/flask-app-image-repository:latest
EOF
done

0 comments on commit d44f746

Please sign in to comment.