Skip to content

Commit 463178e

Browse files
committed
feat: jib 적용 및 docker-compose 배포 세팅
1 parent 060fb94 commit 463178e

File tree

6 files changed

+114
-16
lines changed

6 files changed

+114
-16
lines changed

.github/workflows/cd.yml

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on:
44
push:
55
branches:
66
- main
7+
- feat/cd-pipeline
78

89
jobs:
910
build-and-push:
@@ -28,21 +29,19 @@ jobs:
2829
restore-keys: |
2930
${{ runner.os }}-gradle-
3031
31-
- name: Build with Gradle
32+
- name: Build and Push with Jib (API)
3233
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
3334
with:
34-
arguments: clean bootJar
35+
arguments: clean :tuk-api:jib -Djib.to.image=${{ secrets.NCP_CONTAINER_REGISTRY_API }}/tuk-api -Djib.to.auth.username=${{ secrets.NCP_ACCESS_KEY }} -Djib.to.auth.password=${{ secrets.NCP_SECRET_KEY }}
36+
env:
37+
JIB_TO_IMAGE: ${{ secrets.NCP_CONTAINER_REGISTRY_API }}/tuk-api
38+
JIB_TO_AUTH_USERNAME: ${{ secrets.NCP_ACCESS_KEY }}
39+
JIB_TO_AUTH_PASSWORD: ${{ secrets.NCP_SECRET_KEY }}
3540

36-
- name: Set up Docker Build
37-
uses: docker/setup-buildx-action@v2
38-
39-
- name: Docker build and push to NCP container registry
41+
- name: Copy docker files to server
4042
run: |
41-
sudo docker build --build-arg DEPENDENCY=build/dependency -t ${{ secrets.NCP_CONTAINER_REGISTRY_API }}/goalpanzi-api --platform linux/amd64 .
42-
sudo docker login ${{ secrets.NCP_CONTAINER_REGISTRY_API }} -u ${{ secrets.NCP_ACCESS_KEY }} -p ${{ secrets.NCP_SECRET_KEY }}
43-
sudo docker push ${{ secrets.NCP_CONTAINER_REGISTRY_API }}/goalpanzi-api
44-
45-
sshpass -p ${{ secrets.API_SERVER_PASSWORD }} scp -P ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no ./docker-compose.yml ${{ secrets.API_SERVER_USERNAME }}@${{ secrets.API_SERVER_HOST }}:${{ secrets.DOCKER_COMPOSE_PATH }}
43+
sshpass -p ${{ secrets.API_SERVER_PASSWORD }} scp -P ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no ./docker/docker-compose.prod.yml ${{ secrets.API_SERVER_USERNAME }}@${{ secrets.API_SERVER_HOST }}:${{ secrets.DOCKER_COMPOSE_PATH }}/docker-compose.yml
44+
sshpass -p ${{ secrets.API_SERVER_PASSWORD }} scp -P ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no ./docker/init.sql ${{ secrets.API_SERVER_USERNAME }}@${{ secrets.API_SERVER_HOST }}:${{ secrets.DOCKER_COMPOSE_PATH }}
4645
shell: bash
4746

4847
deploy-to-server:
@@ -73,9 +72,5 @@ jobs:
7372
export REDIS_HOST=${{ secrets.REDIS_HOST }}
7473
7574
sudo docker rm -f $(docker ps -qa)
76-
77-
sudo docker login ${{ secrets.NCP_CONTAINER_REGISTRY_API }} -u ${{ secrets.NCP_ACCESS_KEY }} -p ${{ secrets.NCP_SECRET_KEY }}
78-
sudo docker pull ${{ secrets.NCP_CONTAINER_REGISTRY_API }}/goalpanzi-api
79-
8075
docker-compose -f ${{ secrets.DOCKER_COMPOSE_PATH }}/docker-compose.yml up -d
8176
docker image prune -f

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ plugins {
44
kotlin("plugin.jpa") version "1.9.25" apply false
55
id("org.springframework.boot") version "3.5.3" apply false
66
id("io.spring.dependency-management") version "1.1.7" apply false
7+
id("com.google.cloud.tools.jib") version "3.4.0" apply false
78
}
89

910
java {

docker/docker-compose.prod.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
version: '3.8'
2+
3+
services:
4+
api:
5+
container_name: tuk-api
6+
image: ${NCP_CONTAINER_REGISTRY_API}/tuk-api:latest
7+
restart: always
8+
ports:
9+
- "8080:8080"
10+
environment:
11+
SPRING_PROFILES_ACTIVE: prod
12+
MYSQL_USERNAME: ${MYSQL_USERNAME}
13+
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
14+
MYSQL_HOST: mysql
15+
MYSQL_PORT: 3306
16+
JWT_SECRET: ${JWT_SECRET}
17+
REDIS_HOST: redis
18+
REDIS_PORT: 6379
19+
APPLE_CLIENT_ID: ${APPLE_CLIENT_ID}
20+
GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
21+
GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET}
22+
depends_on:
23+
- mysql
24+
- redis
25+
networks:
26+
- tuk-network
27+
mysql:
28+
image: mysql:8.0.39
29+
container_name: tuk-mysql
30+
restart: always
31+
environment:
32+
MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}
33+
MYSQL_DATABASE: tuk_db
34+
MYSQL_USER: ${MYSQL_USERNAME}
35+
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
36+
ports:
37+
- "3306:3306"
38+
volumes:
39+
- mysql_data:/var/lib/mysql
40+
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
41+
command:
42+
- --character-set-server=utf8mb4
43+
- --collation-server=utf8mb4_unicode_ci
44+
- --skip-character-set-client-handshake
45+
networks:
46+
- tuk-network
47+
48+
redis:
49+
image: redis:7.2-alpine
50+
container_name: tuk-redis
51+
restart: always
52+
ports:
53+
- "6379:6379"
54+
volumes:
55+
- redis_data:/data
56+
command: redis-server --appendonly yes
57+
networks:
58+
- tuk-network
59+
60+
volumes:
61+
mysql_data:
62+
driver: local
63+
redis_data:
64+
driver: local
65+
66+
networks:
67+
tuk-network:
68+
driver: bridge

docker/init.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CREATE DATABASE IF NOT EXISTS tuk_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

tuk-api/build.gradle.kts

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,32 @@
1+
plugins {
2+
id("com.google.cloud.tools.jib")
3+
}
4+
5+
jib {
6+
from {
7+
image = "eclipse-temurin:21-jre"
8+
}
9+
to {
10+
image = System.getProperty("jib.to.image") ?: System.getenv("JIB_TO_IMAGE") ?: "tuk-api"
11+
tags = setOf("latest", project.version.toString())
12+
auth {
13+
username = System.getProperty("jib.to.auth.username") ?: System.getenv("JIB_TO_AUTH_USERNAME")
14+
password = System.getProperty("jib.to.auth.password") ?: System.getenv("JIB_TO_AUTH_PASSWORD")
15+
}
16+
}
17+
container {
18+
ports = listOf("8080")
19+
mainClass = "nexters.tuk.TukServerApplicationKt"
20+
jvmFlags = listOf(
21+
"-XX:InitialRAMPercentage=25.0",
22+
"-XX:MinRAMPercentage=25.0",
23+
"-XX:MaxRAMPercentage=50.0",
24+
"-XX:+UseG1GC",
25+
"-Dspring.profiles.active=prod"
26+
)
27+
}
28+
}
29+
130
dependencies {
231
implementation("org.springframework.boot:spring-boot-starter-web")
332
implementation("org.springframework.boot:spring-boot-starter-actuator")
@@ -21,7 +50,7 @@ dependencies {
2150
implementation("io.jsonwebtoken:jjwt-jackson:${properties["jjwtVersion"]}")
2251

2352
implementation("com.nimbusds:nimbus-jose-jwt:${properties["nimbusJwtVersion"]}")
24-
53+
2554
// test
2655
testImplementation("org.springframework.boot:spring-boot-starter-test")
2756
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
@@ -41,4 +70,8 @@ dependencies {
4170
tasks.withType<Test> {
4271
useJUnitPlatform()
4372
systemProperty("spring.profiles.active", "test")
73+
}
74+
75+
tasks.withType<Jar> {
76+
archiveBaseName.set("tuk-api")
4477
}

0 commit comments

Comments
 (0)