Skip to content

Commit

Permalink
update dev_docker_gradle.yml
Browse files Browse the repository at this point in the history
  • Loading branch information
KiSeungMin committed Sep 21, 2024
1 parent 5d95d84 commit 4e73283
Showing 1 changed file with 62 additions and 46 deletions.
108 changes: 62 additions & 46 deletions .github/workflows/dev_docker_gradle.yml
Original file line number Diff line number Diff line change
@@ -1,58 +1,74 @@
name: Java CI with Gradle
name: Java CI with Gradle # 워크플로우의 이름 설정

on:
push:
branches: ["dev" ]
branches: ["dev"] # dev 브랜치에 푸시될 때 워크플로우 실행
pull_request:
branches: ["dev" ]
branches: ["dev"] # dev 브랜치에 대한 PR이 생성되거나 업데이트될 때 워크플로우 실행

permissions:
contents: read
contents: read # 워크플로우의 권한 설정 (read-only)

jobs:
build:

runs-on: ubuntu-latest
runs-on: ubuntu-latest # 워크플로우가 실행될 환경 설정 (Ubuntu 최신 버전)

steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'


- name: make application-prod.yml
run: |
cd ./src/main/resources
touch ./application-prod.yml
echo "${{ secrets.APPLICATION_PROD }}" > ./application-prod.yml
- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew build -x test

- name: Docker build
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -t app .
docker tag app ${{ secrets.DOCKER_USERNAME }}/sejongmate:latest
docker push ${{ secrets.DOCKER_USERNAME }}/sejongmate:latest
- name: Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }} # EC2 인스턴스 퍼블릭 DNS
username: ec2-user
key: ${{ secrets.PRIVATE_KEY }} # pem 키
# 도커 작업
script: |
docker pull ${{ secrets.DOCKER_USERNAME }}/sejongmate:latest
docker stop $(docker ps -a -q)
docker run -d --log-driver=syslog -p 8080:8080 ${{ secrets.DOCKER_USERNAME }}/sejongmate:latest
docker rm $(docker ps --filter 'status=exited' -a -q)
docker image prune -a -f
# 코드 체크아웃: GitHub Actions가 현재 리포지토리의 코드를 가져옵니다.
- uses: actions/checkout@v3

# JDK 17 설정: Java 17 버전을 사용하기 위해 JDK를 설치합니다.
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17' # JDK 버전 17 설정
distribution: 'temurin' # Temurin JDK 배포판 사용

# application-dev.yml 파일 생성: dev 환경의 설정 파일을 생성하고 secrets에서 값을 가져와 입력합니다.
- name: make application-dev.yml
run: |
cd ./src/main/resources # resources 디렉토리로 이동
touch ./application-dev.yml # application-dev.yml 파일 생성
echo "${{ secrets.APPLICATION_DEV }}" > ./application-dev.yml # GitHub Secrets에서 설정값을 가져와 파일에 저장
# Gradle Wrapper 실행 권한 부여: gradlew에 실행 권한을 부여합니다.
- name: Grant execute permission for gradlew
run: chmod +x gradlew

# Gradle 빌드: Gradle을 사용해 프로젝트를 빌드하되, 테스트는 생략합니다.
- name: Build with Gradle
run: ./gradlew build -x test # 테스트는 실행하지 않고 빌드만 수행

# Docker 이미지 빌드 및 푸시
- name: Docker build
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} # Docker Hub에 로그인
docker build -t app . # Docker 이미지를 'app'이라는 이름으로 빌드
docker tag app ${{ secrets.DOCKER_USERNAME }}/ono:latest # 이미지를 Docker Hub 저장소로 태깅
docker push ${{ secrets.DOCKER_USERNAME }}/ono:latest # 이미지를 Docker Hub에 푸시
# Bastion 서버를 통해 스프링 서버로 배포
- name: Deploy via Bastion Server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.BASTION_HOST }} # Bastion 서버의 퍼블릭 IP 또는 DNS 주소
username: ec2-user # Bastion 서버의 사용자 이름
key: ${{ secrets.BASTION_PRIVATE_KEY }} # Bastion 서버의 SSH 개인 키 (GitHub Secrets에서 가져옴)
port: 22 # SSH 연결에 사용할 포트 (기본값 22)
script: |
# Bastion 서버에서 스프링 서버로 SSH 연결 및 도커 작업 수행
ssh -o StrictHostKeyChecking=no -i ~/your-spring-server-key.pem ec2-user@${{ secrets.SPRING_SERVER_IP }} << 'EOSSH'
# 스프링 서버에서 Docker Hub에 로그인
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
# 최신 Docker 이미지를 Docker Hub에서 Pull
docker pull ${{ secrets.DOCKER_USERNAME }}/ono:latest
# 실행 중인 모든 컨테이너를 중지 (실행 중인 컨테이너가 없을 경우 오류 무시)
docker stop $(docker ps -a -q) || true
# 중지된 모든 컨테이너를 제거 (없을 경우 오류 무시)
docker rm $(docker ps -a -q) || true
# 새로 받은 이미지를 기반으로 컨테이너 실행 (8080 포트 사용)
docker run -d --log-driver=syslog -p 8080:8080 ${{ secrets.DOCKER_USERNAME }}/ono:latest
# 24시간 동안 사용되지 않은 모든 Docker 이미지를 삭제하여 공간 확보
docker image prune -a -f --filter "until=24h"
EOSSH

0 comments on commit 4e73283

Please sign in to comment.