diff --git a/.github/workflows/dev-deploy.yml b/.github/workflows/dev-deploy.yml index 6bf0063..cb19003 100644 --- a/.github/workflows/dev-deploy.yml +++ b/.github/workflows/dev-deploy.yml @@ -57,12 +57,12 @@ jobs: uses: docker/build-push-action@v2 with: context: . - file: ./Dockerfile + file: ./Dockerfile.dev platforms: linux/amd64 push: true tags: ${{ steps.docker_meta.outputs.tags }} - ## 원격에 + ## 원격에 접속 및 디렉토리 생성 - name: create remote directory uses: appleboy/ssh-action@master with: diff --git a/.github/workflows/prod-deploy.yml b/.github/workflows/prod-deploy.yml new file mode 100644 index 0000000..7110107 --- /dev/null +++ b/.github/workflows/prod-deploy.yml @@ -0,0 +1,103 @@ +name: Deploy to Prod + +## main에 릴리즈가 일어날 때마다 빌드 및 배포 +on: + push: + branches: [ main ] + tags: [ "v*.*.*" ] + +jobs: + build: + ## checkout 후 자바 17 버전으로 설정 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + ## gradlew에 권한 부여 + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + ## Copy properties files + - name: Make application-prod.yml + run: | + touch ./src/main/resources/application-prod.yml + echo "$PROPERTIES_PROD" > ./src/main/resources/application-prod.yml + # Make env file + env: + PROPERTIES_PROD: ${{ secrets.PROPERTIES_PROD }} + + ## gradle build + - name: Build with Gradle + run: ./gradlew clean build + + ## docker metadata(namespace/repository) + - name: Docker meta + id: docker_meta + uses: crazy-max/ghaction-docker-meta@v1 + with: + images: jeonhaeseung/ness-server-prod + tag-semver: | + {{version}} + {{major}}.{{minor}} + + ## 멀티-플랫폼 빌드 도구 Buildx 사용 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + ## DockerHub에 로그인 + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + ## 위에서 설정한 테그를 참고해 push + - name: Docker build & push + uses: docker/build-push-action@v2 + with: + context: . + file: ./Dockerfile.prod + platforms: linux/amd64 + push: true + tags: ${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} + + ## 원격에 접속 및 디렉토리 생성 + - name: create remote directory + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.HOST_PROD }} + username: ${{ secrets.USER_PROD }} + key: ${{ secrets.KEY_PROD }} + script: mkdir -p ./prod + + ## 소스 코드 복사 붙여넣기 + - name: copy source via ssh key + uses: burnett01/rsync-deployments@4.1 + with: + switches: -avzr --delete + remote_path: ./prod + remote_host: ${{ secrets.HOST_PROD }} + remote_user: ${{ secrets.USER_PROD }} + remote_key: ${{ secrets.KEY_PROD }} + + ## EC2에 배포(CD) + - name: executing remote ssh commands using password + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.HOST_PROD }} + username: ${{ secrets.USER_PROD }} + key: ${{ secrets.KEY_PROD }} + script: | + sh ./prod/config/scripts/deploy.sh + + sudo docker stop $(sudo docker ps -a -q) + sudo docker rm $(sudo docker ps -a -q) + sudo docker rmi $(sudo docker images -q) + docker pull jeonhaeseung/ness-server-prod:prod + docker run -d --name backend-server -p 8080:8080 --restart unless-stopped jeonhaeseung/ness-server-prod:prod \ No newline at end of file diff --git a/.gitignore b/.gitignore index 4fe6b4e..80aff16 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,5 @@ out/ .vscode/ ### Secrets ### -application-dev.yml \ No newline at end of file +application-dev.yml +application-prod.yml \ No newline at end of file diff --git a/Dockerfile b/Dockerfile.dev similarity index 55% rename from Dockerfile rename to Dockerfile.dev index 30b38bd..fedad0e 100644 --- a/Dockerfile +++ b/Dockerfile.dev @@ -1,4 +1,4 @@ FROM openjdk:17-alpine AS builder ARG JAR_FILE=build/libs/*.jar COPY ${JAR_FILE} app.jar -ENTRYPOINT ["java","-jar","/app.jar"] \ No newline at end of file +ENTRYPOINT ["java","-jar", "-Dspring.profiles.active=dev", "/app.jar"] \ No newline at end of file diff --git a/Dockerfile.prod b/Dockerfile.prod new file mode 100644 index 0000000..64c5cd2 --- /dev/null +++ b/Dockerfile.prod @@ -0,0 +1,4 @@ +FROM openjdk:17-alpine AS builder +ARG JAR_FILE=build/libs/*.jar +COPY ${JAR_FILE} app.jar +ENTRYPOINT ["java","-jar", "-Dspring.profiles.active=prod", "/app.jar"] \ No newline at end of file