진행상황
- k8s 구축 완료
- front server, signarling server CI 구축 완료
- front server, signarling server deploy yaml 작성 완료
목표
- 개발 완료된 스프링부트 프로젝트를 k8s환경에서 실행시키기 위해 도커파일로 만들어야 한다.
- 도커파일 생성후 컨테이너로 커넥션 테스트 하기
- 스프링부트 프로젝트 CI 적용시키기
스프링부트로 개발 할 때는 RDS를 사용하여 작업했다. 여러명이 작업을 해야할때 DB문제를 최소화 시키기 위해서 주로 사용했음. 그러나 k8s환경에서 테스트를 해야하기 때문에 DB에 대한 도커 파일과 스프링부트의 도커파일을 따로 만들어서 잘 연동이 되는지 테스트가 필요하다!
개발할때는 yml 코드를 사용했으나 인덴트부분에 대한 불편함 때문에 (혹시 모를 오류를 방지) 설정을 property로 변경했다
spring.datasource.url=jdbc:mysql://mariadb:3306/eyestalk?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=pass123#
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
# 콘솔에 SQL 출력 여부
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
# hibernate 설정
spring.jpa.database=mysql
spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.generate-ddl=false
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
FROM openjdk:11-jdk AS builder
RUN apt-get -y update && apt-get -y install default-jre && \
apt-get clean -y && \
apt-get autoremove -y && \
rm -rfv /tmp/* /var/lib/apt/lists/* /var/tmp/*
ADD Eyes-talk-db-0.0.1-SNAPSHOT.jar spring-app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/spring-app.jar"]
FROM mysql:8.0
ENV MYSQL_ROOT_PASSWORD pass123#
ENV MYSQL_DATABASE eyestalk
CMD ["--character-set-server=utf8", "--collation-server=utf8_general_ci"]
sudo docker build -t mydb:1.0 .
sudo docker run --name mariadb -p 3306:3306 -e MARIADB_ROOT_PASSWORD=pass123# -d mydb:1.0
sudo docker build -t spring:1.0 .
sudo docker run -d --name spring-container -p 8080:8080 --link mariadb spring:1.0
spring.datasource.url=jdbc:mysql://mariadb:3306/eyestalk?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=${DATABASE-USERNAME}
spring.datasource.password=${DATABASE-PASSWORD}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
# 콘솔에 SQL 출력 여부
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
# hibernate 설정
spring.jpa.database=mysql
spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.generate-ddl=false
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
FROM mariadb:10.2
ENV DATABASE-USERNAME root
ENV DATABASE-PASSWORD pass123#
ENV MYSQL_DATABASE eyestalk
CMD ["--character-set-server=utf8", "--collation-server=utf8_general_ci"]
FROM openjdk:11-jdk AS builder
RUN apt-get -y update && apt-get -y install default-jre && \
apt-get clean -y && \
apt-get autoremove -y && \
rm -rfv /tmp/* /var/lib/apt/lists/* /var/tmp/*
ADD Eyes-talk-db-0.0.1-SNAPSHOT.jar spring-app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/spring-app.jar", "-Dspring-boot.run.arguments=--DATABASE-USERNAME=${DATABASE-USERNAME}, --DATABASE-PASSWORD=${DATABASE-PASSWORD}"]]
sudo docker build -t mydb:1.0 .
sudo docker build -t spring:1.0 .
sudo docker run -d --name spring-container -p 8080:8080 --link mariadb spring:1.0 --DATABASE-USERNAME=root --DATABASE-PASSWORD=pass123#
sudo docker run --name mariadb -p 3306:3306 -e MARIADB_ROOT_PASSWORD=pass123# -d mydb:1.0
테스트 내내 코드 수정하고 jar 파일 생성했다가 삭제했다가 docker image 삭제했다 생성했다가 build 했다가 안했다가 힘들었다... ㅎ
name: eyestalk-spring
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
- name: Bump version and push tag
id: tag_version
uses: mathieudutour/github-tag-action@v5.5 # 가져다 쓸 auto tagging 프로그램
with:
github_token: ${{ secrets.GITHUB_TOKEN }} # secrets.GITHUB_TOKEN 는 자동생성됨
- name: Create a GitHub release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.tag_version.outputs.new_tag }}
release_name: Release ${{ steps.tag_version.outputs.new_tag }}
body: ${{ steps.tag_version.outputs.changelog }}
-
name: Docker meta
id: docker_meta
uses: crazy-max/ghaction-docker-meta@v1
with:
images: roheejae/eyestalk-spring
tag-semver: |
{{version}}
{{major}}.{{minor}}
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
platforms: linux/amd64
push: true
tags: roheejae/eyestalk-spring:${{ steps.tag_version.outputs.new_tag }}