Skip to content

Commit

Permalink
deploy: prepare workflow for v1 deployment (#139)
Browse files Browse the repository at this point in the history
  • Loading branch information
baebae02 authored Feb 21, 2024
2 parents 08b1768 + 514fcc9 commit d38aa94
Show file tree
Hide file tree
Showing 5 changed files with 212 additions and 12 deletions.
3 changes: 0 additions & 3 deletions .github/workflows/deploy.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ name: Deploy Backend on Development Server via DockerHub

on:
workflow_dispatch:
push:
branches:
- main

permissions:
contents: read
Expand Down
80 changes: 80 additions & 0 deletions .github/workflows/deploy.dev3.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
name: Deploy Backend on Development Environment

on:
workflow_dispatch:
push:
branches:
- main
- deploy/v2-workflow

permissions:
contents: read

env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
KEY: ${{ secrets.SSH_KEY }}
PORT: ${{ secrets.PORT }}
IMAGE_NAME: registry.uspray.kr/uspray-server-dev:latest
PROJECT_NAME: uspray-server-dev

jobs:
deliver:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: "11"
distribution: "temurin"

- name: Make gradlew executable
run: chmod +x ./gradlew # Gradle 스크립트 파일에 실행 권한을 부여합니다.

- name: Create application.yml
run: |
mkdir -p ./src/main/resources
cd ./src/main/resources
echo "${{ secrets.APPLICATION }}" >> ./application.yml
- name: Create service-account-file.json
run: |
mkdir -p ./src/main/resources/firebase
cd ./src/main/resources/firebase
echo "${{ secrets.SERVICE_ACCOUNT_FILE }}" | base64 -d > service-account-file.json
- name: Build with Gradle
run: ./gradlew clean build

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

- name: Build and push
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
push: true
tags: ${{ env.IMAGE_NAME }}
platforms: linux/amd64

deploy:
needs: deliver
runs-on: self-hosted
steps:
- name: Checkout
uses: actions/checkout@v2

- name: Deploy Docker image
env:
SERVICE_NAME: uspray-spring-dev
DOMAIN_HOST: api.dev.uspray.kr
run: |
if [ ! -z "$(docker ps -q -f name=${{env.PROJECT_NAME}})" ]; then
docker compose -p ${{env.PROJECT_NAME}} down
docker rmi ${{env.IMAGE_NAME}}
fi
docker compose -p ${{env.PROJECT_NAME}} up -d
110 changes: 110 additions & 0 deletions .github/workflows/deploy.prod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Release Backend on Production Environment

on:
workflow_dispatch:
release:
types:
- published

permissions:
contents: read

env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
KEY: ${{ secrets.SSH_KEY }}
PORT: ${{ secrets.PORT }}
IMAGE_NAME: registry.uspray.kr/uspray-server-prod:latest
PROJECT_NAME: uspray-server-prod

jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

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

- name: Make gradlew executable
run: chmod +x gradlew

- name: Create application.yml
run: |
mkdir -p ./src/main/resources
cd ./src/main/resources
echo "${{ secrets.APPLICATION_PRODUCTION }}" base64 -d > application.yml
- name: Create service-account-file.json
run: |
mkdir -p ./src/main/resources/firebase
cd ./src/main/resources/firebase
echo "${{ secrets.SERVICE_ACCOUNT_FILE }}" base64 -d > service-account-file.json
- name: Build with Gradle
run: ./gradlew clean build

deliver:
needs: test
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: "11"
distribution: "temurin"

- name: Make gradlew executable
run: chmod +x ./gradlew # Gradle 스크립트 파일에 실행 권한을 부여합니다.

- name: Create application.yml
run: |
mkdir -p ./src/main/resources
cd ./src/main/resources
echo "${{ secrets.APPLICATION }}" >> ./application.yml
- name: Create service-account-file.json
run: |
mkdir -p ./src/main/resources/firebase
cd ./src/main/resources/firebase
echo "${{ secrets.SERVICE_ACCOUNT_FILE }}" | base64 -d > service-account-file.json
- name: Build with Gradle
run: ./gradlew clean build

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

- name: Build and push
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
push: true
tags: ${{ env.IMAGE_NAME }}
platforms: linux/amd64

deploy:
needs: deliver
runs-on: self-hosted
steps:
- name: Checkout
uses: actions/checkout@v2

- name: Deploy Docker image
env:
SERVICE_NAME: uspray-spring-prod
DOMAIN_HOST: api.uspray.kr
run: |
if [ ! -z "$(docker ps -q -f name=${{env.PROJECT_NAME}})" ]; then
docker compose -p ${{env.PROJECT_NAME}} down
docker rmi ${{env.IMAGE_NAME}}
fi
docker compose -p ${{env.PROJECT_NAME}} up -d
16 changes: 12 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
FROM openjdk:11-jdk
FROM gradle:jdk11 AS build
WORKDIR /home/gradle/src
COPY --chown=gradle:gradle . /home/gradle/src
RUN gradle clean build --no-daemon

FROM adoptopenjdk:11-jre-hotspot

ARG JAR_FILE=build/libs/*.jar

WORKDIR /opt/app

ARG JAR_FILE=build/libs/uspray-0.0.1-SNAPSHOT.jar
COPY --from=build /home/gradle/src/build/libs/*.jar app.jar

COPY ${JAR_FILE} app.jar
COPY src/main/resources/application.yml config/
COPY src/main/resources/firebase/service-account-file.json config/firebase/

ENTRYPOINT ["java","-jar","app.jar"]

EXPOSE 8080
EXPOSE 8080
15 changes: 10 additions & 5 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,25 @@ version: '3.8'

services:
uspray-spring:
image: bae4614/uspray-server:latest
container_name: prayhelper-spring-dev
image: registry.uspray.kr/uspray-server-dev:latest
environment:
TZ: "Asia/Seoul"
ports:
- "8002:8080"
- "8080"
depends_on:
- redis
labels:
- "traefik.enable=true"
- "traefik.http.routers.${SERVICE_NAME}.rule=Host(`${DOMAIN_HOST}`)"
- "traefik.http.routers.${SERVICE_NAME}.entrypoints=websecure"
- "traefik.http.routers.${SERVICE_NAME}.tls=true"
- "traefik.http.routers.${SERVICE_NAME}.tls.certresolver=letsencrypt"
- "traefik.http.services.${SERVICE_NAME}.loadbalancer.server.port=8080"

redis:
image: redis:latest
container_name: redis
ports:
- "6379:6379"
- "6379"
volumes:
- redis_data:/data
command: redis-server
Expand Down

0 comments on commit d38aa94

Please sign in to comment.