Skip to content

Update README.md

Update README.md #121

Workflow file for this run

name: Auto deploy to AWS
on:
push:
branches: [ "develop" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Run chmod to make gradlew executable
run: chmod +x ./gradlew
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Set YML
run: |
echo ${{ secrets.APPLICATION_YML }} | base64 --decode > ./src/main/resources/application.yml
- name: Build with Gradle
uses: gradle/[email protected]
with:
arguments: clean build -x test
- name: Docker build & push to Docker repo
run: |
docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }}
echo "docker 로그인 성공"
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/ggumi .
echo "docker 빌드 성공"
docker push ${{ secrets.DOCKERHUB_USERNAME }}/ggumi
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: AWS login and docker image pull and run
uses: appleboy/[email protected]
with:
host: ${{ secrets.EC2_HOST }}
username: ec2-user
key: ${{ secrets.EC2_PRIVATE_KEY }}
port: 22
envs: GITHUB_SHA
script: |
sudo docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }}
echo "docker 로그인 성공"
sudo docker stop $(sudo docker ps -aq)
echo "현재 실행 중인 모든 Docker 컨테이너 중지"
sudo docker rm -f $(sudo docker ps -qa)
echo "모든 Docker 컨테이너 강제로 삭제"
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/ggumi
echo "docker pull 성공"
sudo docker run -d -p 80:8080 ${{ secrets.DOCKERHUB_USERNAME }}/ggumi
sudo docker image prune -f
echo "사용하지 않는 Docker image 정리"
- name: Configure AWS CLI
run: |
echo "Configuring AWS CLI"
aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws configure set default.region ap-northeast-2 # 지역 설정
- name: Test AWS CLI Configuration
run: |
echo "Testing AWS CLI Configurationn"
aws sts get-caller-identity
- name: Fetch Instance ID And
run: |
echo "Fetching Instance ID..."
INSTANCE_ID=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=ggumi" --query "Reservations[*].Instances[*].InstanceId" --output text | xargs)
if [ -z "$INSTANCE_ID" ]; then
echo "Error: No instance found with the tag 'ggumi'."
exit 1
else
echo "fetch Instance ID success"
fi
echo "Creating AMI..."
IMAGE_ID=$(aws ec2 create-image --instance-id $INSTANCE_ID --name "ggumi-$(date +%Y%m%d%H%M%S)" --no-reboot --query 'ImageId' --output text)
echo "Creating AMI with ID: $IMAGE_ID"
echo "Waiting for the AMI to become available..."
aws ec2 wait image-available --image-ids $IMAGE_ID
echo "AMI $IMAGE_ID is now available."
echo "Updating existing Launch Template with new AMI..."
CURRENT_LAUNCH_TEMPLATE=$(aws ec2 describe-launch-templates --launch-template-names GgumiServerTemplate --query 'LaunchTemplates[0]' --output json)
LAUNCH_TEMPLATE_ID=$(echo $CURRENT_LAUNCH_TEMPLATE | jq -r '.LaunchTemplateId')
LAUNCH_TEMPLATE_VERSION_NUMBER=$(echo $CURRENT_LAUNCH_TEMPLATE | jq -r '.LatestVersionNumber')
LAUNCH_TEMPLATE_VERSION_DATA=$(aws ec2 describe-launch-template-versions --launch-template-id $LAUNCH_TEMPLATE_ID --query 'LaunchTemplateVersions[?VersionNumber==`'$LAUNCH_TEMPLATE_VERSION_NUMBER'`]' --output json)
INSTANCE_TYPE=$(echo $LAUNCH_TEMPLATE_VERSION_DATA | jq -r '.[0].LaunchTemplateData.InstanceType')
KEY_NAME=$(echo $LAUNCH_TEMPLATE_VERSION_DATA | jq -r '.[0].LaunchTemplateData.KeyName')
SECURITY_GROUP_IDS=$(echo $LAUNCH_TEMPLATE_VERSION_DATA | jq -r '.[0].LaunchTemplateData.SecurityGroupIds | join(",")')
aws ec2 create-launch-template-version \
--launch-template-id $LAUNCH_TEMPLATE_ID \
--source-version $LAUNCH_TEMPLATE_VERSION_NUMBER \
--launch-template-data "{
\"ImageId\":\"$IMAGE_ID\",
\"InstanceType\":\"$INSTANCE_TYPE\",
\"KeyName\":\"$KEY_NAME\",
\"SecurityGroupIds\":[\"$SECURITY_GROUP_IDS\"]
}"
echo "Launch Template updated successfully."
- name: Updating Auto Scaling Group
run: |
LATEST_LAUNCH_TEMPLATE=$(aws ec2 describe-launch-templates --launch-template-names GgumiServerTemplate --query 'LaunchTemplates[0]' --output json)
LATEST_LAUNCH_TEMPLATE_ID=$(echo $LATEST_LAUNCH_TEMPLATE | jq -r '.LaunchTemplateId')
LATEST_LAUNCH_TEMPLATE_VERSION_NUMBER=$(echo $LATEST_LAUNCH_TEMPLATE | jq -r '.LatestVersionNumber')
echo "Updating Auto Scaling Group with new Launch Template version..."
aws autoscaling update-auto-scaling-group --auto-scaling-group-name GgumiASG --launch-template "LaunchTemplateId=$LATEST_LAUNCH_TEMPLATE_ID,Version=$LATEST_LAUNCH_TEMPLATE_VERSION_NUMBER"
echo "Auto Scaling Group updated successfully."
- name: Start Instance Refresh
run: |
echo "Starting instance refresh for Auto Scaling Group..."
aws autoscaling start-instance-refresh --auto-scaling-group-name GgumiASG --strategy Rolling
echo "Instance refresh started successfully."