Skip to content

Commit

Permalink
Merge pull request #1 from wafflestudio/feat/docker
Browse files Browse the repository at this point in the history
Feat/docker
  • Loading branch information
ws11222 authored Jan 2, 2025
2 parents c2596ec + 68cde68 commit 96db1df
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 79 deletions.
File renamed without changes.
92 changes: 28 additions & 64 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ permissions:
contents: read

jobs:
CI-CD:
CI:
runs-on: ubuntu-latest
steps:

Expand All @@ -29,89 +29,53 @@ jobs:
java-version: '17'
distribution: 'temurin'

# gradlew에 실행 권한 부여
- name: Grant execute permission for gradlew
run: chmod +x gradlew

# 린트 체크 실행
- name: Lint Check
run: ./gradlew ktlintCheck

# 환경별 yml 파일 생성(1) - application.yml
- name: make application.yml
if: |
contains(github.ref, 'main') ||
contains(github.ref, 'feat/*')
run: |
mkdir ./src/main/resources # resources 폴더 생성
cd ./src/main/resources # resources 폴더로 이동
touch ./application.yml # application.yml 생성
echo "${{ secrets.YML }}" > ./application.yml # github actions에서 설정한 값을 application.yml 파일에 쓰기
shell: bash

# 환경별 yml 파일 생성(2) - dev
- name: make application-dev.yml
if: contains(github.ref, 'feat/*')
run: |
cd ./src/main/resources
touch ./application-dev.yml
echo "${{ secrets.YML_DEV }}" > ./application-dev.yml
shell: bash

# 환경별 yml 파일 생성(3) - prod
- name: make application-prod.yml
if: contains(github.ref, 'main')
run: |
cd ./src/main/resources
touch ./application-prod.yml
echo "${{ secrets.YML_PROD }}" > ./application-prod.yml
shell: bash

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

# docker build & push to production
- name: Docker build & push to prod
# Docker 로그인
- name: Docker login
if: contains(github.ref, 'main')
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile-dev -t ${{ secrets.DOCKER_USERNAME }}/docker-test-prod .
docker push ${{ secrets.DOCKER_USERNAME }}/docker-test-prod
# docker build & push to develop
- name: Docker build & push to dev
if: contains(github.ref, 'feat/*')
# Docker 이미지 빌드 및 푸시
- name: Docker build & push
if: contains(github.ref, 'main')
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile-dev -t ${{ secrets.DOCKER_USERNAME }}/docker-test-dev .
docker push ${{ secrets.DOCKER_USERNAME }}/docker-test-dev
docker build -f ./Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/karrot .
docker push ${{ secrets.DOCKER_USERNAME }}/karrot
## deploy to production
CD:
runs-on: ubuntu-latest
needs: CI
if: contains(github.ref, 'main')
steps:

# 다시 checkout
- name: Checkout again
uses: actions/checkout@v3

# EC2에 배포
- name: Deploy to prod
uses: appleboy/ssh-action@master
id: deploy-prod
if: contains(github.ref, 'main')
with:
host: ${{ secrets.HOST_PROD }} # EC2 퍼블릭 IPv4 DNS
username: ubuntu
key: ${{ secrets.PRIVATE_KEY }}
envs: GITHUB_SHA
script: |
sudo docker ps
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/docker-test-prod
sudo docker run -d -p 8082:8082 ${{ secrets.DOCKER_USERNAME }}/docker-test-prod
sudo docker image prune -f
## deploy to develop
- name: Deploy to dev
uses: appleboy/ssh-action@master
id: deploy-dev
if: contains(github.ref, 'develop')
with:
host: ${{ secrets.HOST_DEV }} # EC2 퍼블릭 IPv4 DNS
username: ${{ secrets.USERNAME }} # ubuntu
password: ${{ secrets.PASSWORD }}
port: 22
key: ${{ secrets.PRIVATE_KEY }}
script: |
sudo docker ps
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/docker-test-dev
sudo docker run -d -p 8081:8081 ${{ secrets.DOCKER_USERNAME }}/docker-test-dev
sudo docker stop $(sudo docker ps -q)
sudo docker rm $(sudo docker ps -aq)
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/karrot
sudo docker run -d -p 8080:8080 ${{ secrets.DOCKER_USERNAME }}/karrot
sudo docker image prune -f
17 changes: 4 additions & 13 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,14 +1,5 @@
# Use a base image for running the application
FROM openjdk:17-jdk-slim

# Set the working directory in the container
WORKDIR /app

# Copy the pre-built JAR file into the container
COPY /app/build/libs/app-0.0.1-SNAPSHOT.jar app.jar

# Expose port 8080 for the Spring application
FROM openjdk:17
ARG JAR_FILE=build/libs/karrot-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} /app.jar
EXPOSE 8080

# Specify the entry point for the application
ENTRYPOINT ["java", "-jar", "app.jar"]
ENTRYPOINT ["java", "-jar", "/app.jar"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.toyProject7.karrot.test.controller

import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RestController

@RestController
class TestController {
@GetMapping("/api/test")
fun getTest(): ResponseEntity<TestResponse> {
return ResponseEntity.ok(TestResponse(1, 2, "2번 테스트 제목", "2번 테스트 본문내용"))
}

@GetMapping("/api/test2")
fun getTest2(): ResponseEntity<TestResponse> {
return ResponseEntity.ok(TestResponse(11, 22, "22번 테스트 제목", "22번 테스트 본문내용"))
}

@PostMapping("/api/test3")
fun postTest(
@RequestBody request: TestResponse,
): ResponseEntity<TestResponse> {
val response = TestResponse(request.userId, request.id, request.title, request.body)
return ResponseEntity.ok(response)
}
}

data class TestResponse(
val userId: Int,
val id: Int,
val title: String,
val body: String,
)
4 changes: 2 additions & 2 deletions src/main/resources/application.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
spring:
datasource:
url: 'jdbc:mysql://localhost:3306/karrotdb'
url: 'jdbc:mysql://52.78.132.59:3306/mysql'
driver-class-name: com.mysql.cj.jdbc.Driver
username: admin
username: dev
password: somepassword
jpa:
hibernate:
Expand Down

0 comments on commit 96db1df

Please sign in to comment.