Skip to content

Commit

Permalink
chore: #157 test branch CI/CD 환경 구축
Browse files Browse the repository at this point in the history
  • Loading branch information
kelly6bf committed Aug 5, 2024
1 parent c7ac813 commit 34b3c22
Show file tree
Hide file tree
Showing 8 changed files with 240 additions and 108 deletions.
51 changes: 0 additions & 51 deletions .github/workflows/be-cd.yml

This file was deleted.

56 changes: 0 additions & 56 deletions .github/workflows/be-ci.yml

This file was deleted.

91 changes: 91 additions & 0 deletions .github/workflows/be_cd-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: Coduo Backend Test Server CD

on:
push:
branches: [ "BE/test" ]

jobs:
build:
environment: test
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./backend
steps:
- name: checkout
uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
with:
cache-write-only: true

- name: Grant Execute Permission For Gradlew
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew bootJar

- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_ID }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}

- name: Image build and push
run: |
docker build --build-arg PROFILE=test --build-arg DEPENDENCY=build/dependency -t ${{ secrets.DOCKER_REPO_NAME }}/coduo_springboot-app:test-latest --platform linux/arm64 .
docker push ${{ secrets.DOCKER_REPO_NAME }}/coduo_springboot-app:test-latest
- name: Upload docker-compose yaml script to artifact
uses: actions/upload-artifact@v4
with:
name: docker-compose
path: ${{ github.workspace }}/backend/be_docker-compose.test.yml

deploy:
environment: test
runs-on: coduo_ec2-dev
needs: build
defaults:
run:
working-directory: ./backend
steps:
- name: Set docker-compose YAML script to runner
uses: actions/download-artifact@v4
with:
name: docker-compose
path: ${{ github.workspace }}/backend

- name: Extract secrets as .be_env file
run: |
cat <<EOF > .be_env
# Docker Hub info from Github Secrets
DOCKER_REPO_NAME=${{ secrets.DOCKER_REPO_NAME }}
# DB Configuration secrets info from Github Secrets
MYSQL_DB_NAME=${{ secrets.MYSQL_DB_NAME }}
MYSQL_TIME_ZONE=${{ secrets.MYSQL_TIME_ZONE }}
DB_BINDING_PORT=${{ secrets.DB_BINDING_PORT }}
DB_URL=${{ secrets.DB_URL }}
DB_USERNAME=${{ secrets.DB_USERNAME }}
DB_PASSWORD=${{ secrets.DB_PASSWORD }}
DDL_AUTO=${{ secrets.DDL_AUTO }}
# Server App
SERVER_BINDING_PORT=${{ secrets.SERVER_BINDING_PORT }}
EOF
- name: Stop and remove existing containers
run: |
sudo docker compose -f be_docker-compose.test.yml down --rmi all
- name: Deploy docker container
run: |
sudo docker compose --env-file .be_env -f be_docker-compose.test.yml up -d
50 changes: 50 additions & 0 deletions .github/workflows/be_ci-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Coduo Backend Test Server CI

on:
pull_request:
branches: [ "BE/test" ]

jobs:
build-and-test:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./backend
steps:
- name: checkout
uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
with:
cache-write-only: true

- name: Set up Test MySQL
uses: mirromutth/[email protected]
with:
host port: ${{ secrets.TEST_DB_PORT }}
container port: ${{ secrets.TEST_DB_PORT }}
mysql database: ${{ secrets.TEST_DB_NAME }}
mysql root password: ${{ secrets.TEST_DB_PASSWORD }}

- name: Make test application.yml
run: |
rm -rf ./src/main/resources/application.yml
touch ./src/main/resources/application.yml
echo ${{ secrets.BE_TEST_YML }} | base64 --decode > ./src/main/resources/application.yml
shell: bash

- name: Grant Execute Permission For Gradlew
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew bootJar

- name: Running Test Code
run: ./gradlew --info test
6 changes: 5 additions & 1 deletion backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
FROM amazoncorretto:17

ARG JAR_FILE=build/libs/coduo-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} /coduo-app.jar
ENTRYPOINT ["java", "-jar", "/coduo-app.jar"]

ARG PROFILE
ENV PROFILE_ENV=${PROFILE}
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=${PROFILE_ENV}", "/coduo-app.jar"]
41 changes: 41 additions & 0 deletions backend/be_docker-compose.test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
services:
mysql:
container_name: coduo_mysql
image: mysql:8.0
restart: unless-stopped
ports:
- ${DB_BINDING_PORT}
environment:
MYSQL_DATABASE: ${MYSQL_DB_NAME}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
TZ: ${MYSQL_TIME_ZONE}
volumes:
- ./docker-data/db/mysql/conf.d:/etc/mysql/conf.d
- ./docker-data/db/mysql/data:/var/lib/mysql
- ./docker-data/db/mysql/init:/docker_entrypoint-initdb.d
command:
- '--character-set-server=utf8mb4'
- '--collation-server=utf8mb4_0900_ai_ci'
networks:
- coduo_net

springboot:
container_name: coduo_springboot-app
image: ${DOCKER_REPO_NAME}/springboot-app
platform: linux/arm64
ports:
- ${SERVER_BINDING_PORT}
environment:
SPRING_DATASOURCE_URL: ${DB_URL}
SPRING_DATASOURCE_USERNAME: ${DB_USERNAME}
SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD}
SPRING_JPA_HIBERNATE_DDL-AUTO: ${DDL_AUTO}
restart: on-failure
networks:
- coduo_net
depends_on:
- mysql

networks:
coduo_net:
external: true
30 changes: 30 additions & 0 deletions backend/src/main/resources/application-local.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
spring:
config:
activate:
on-profile: local

datasource:
url: jdbc:h2:mem:database

jpa:
database: h2
database-platform: org.hibernate.dialect.H2Dialect
properties:
hibernate:
storage_engine: innodb
format_sql: true
use_sql_comments: true
hibernate:
ddl-auto: create
open-in-view: false
show_sql: true

h2:
console:
enabled: true

springdoc:
swagger-ui:
persist-authorization: true
default-models-expand-depth: -1
path: /api-docs
23 changes: 23 additions & 0 deletions backend/src/main/resources/application-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
spring:
config:
activate:
on-profile: test

datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${DB_URL}
username: ${DB_USERNAME}
password: ${DB_PASSWORD}

jpa:
database: mysql
hibernate:
ddl-auto: ${DDL_AUTO}
show-sql: true
database-platform: org.hibernate.dialect.MySQLDialect

springdoc:
swagger-ui:
persist-authorization: true
default-models-expand-depth: -1
path: /api-docs

0 comments on commit 34b3c22

Please sign in to comment.