This file contains 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: Build and Push Docker Images and Deploy | |
# main 브랜치에 push or PR 이 오면 실행 | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
jobs: | |
# 도커 이미지 빌드, 푸시 | |
build-and-push: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
# DB 세팅 정보 입력 | |
- name: Set up application.yml | |
run: echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml | |
# SSH 키 복사 | |
- name: Create SSH Key File | |
run: echo "${{ secrets.PRIVATE_KEY }}" > /tmp/private_key.pem | |
- name: Set Permissions for SSH Key | |
run: chmod 600 /tmp/private_key.pem | |
# 도커 로그인 | |
- name: Docker Login | |
uses: docker/[email protected] | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
# 도커 이미지 빌드용 환경 세팅 및 도커 이미지 빌드 | |
- name: Docker build | |
run: | | |
docker build -t ${{ secrets.DOCKER_IMAGE_NAME }}:latest . # 도커 빌드 | |
# 도커 이미지 push | |
- name: Push Docker Images | |
run: | | |
docker push ${{ secrets.DOCKER_IMAGE_NAME }}:latest | |
# 도커 이미지 EC2 인스턴스에 배포 | |
deploy-to-ec2: | |
needs: build-and-push | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Deploy to EC2 | |
uses: appleboy/ssh-action@master | |
with: | |
host: ${{ secrets.EC2_HOST }} # EC2 IP 주소 | |
username: ${{ secrets.EC2_USER }} # EC2 사용자 | |
key: ${{ secrets.PRIVATE_KEY }} # pem 키 | |
# 기존 컨테이너 중지 | |
script: | | |
CONTAINER_ID=$(sudo docker ps -aq --filter "name=kdt-work-plate") | |
if [ ! -z "$CONTAINER_ID" ]; then | |
sudo docker stop $CONTAINER_ID || true | |
sudo docker rm -f $CONTAINER_ID || true | |
fi | |
# 최신 도커 이미지로 컨테이너 실행 | |
sudo docker pull ${{ secrets.DOCKER_IMAGE_NAME }}:latest # 도커 최신 이미지 다운로드 | |
# 도커 이미지 실행 (host.docker.internal 사용 가능하도록) | |
docker run --name kdt-work-plate -d --add-host host.docker.internal:host-gateway -p 8080:8080 ${{ secrets.DOCKER_IMAGE_NAME }}:latest | |
sudo docker image prune -f # 구버전의 도커 이미지 제거 |