도파민 팀 프로젝트 CI/CD 정리

KarmaPol·2023년 9월 2일

CI/CD 구축

참고 자료

구성도

Jenkins

  1. Github master 브랜치 push 발생 시, git pull, gradlew build 수행
  2. 빌드한 Jar파일을 프로젝트에 작성한 Dockerfile을 통해 docker image로 빌드
  3. docker image를 docker hub에 push
  4. 백엔드 배포용 서버에서 docker image pull하여 container 실행

DB 구축

참고 자료

네이버 클라우드 서버는 기존에 mysql이 설치되어 운용 중이므로,

Docker container로 관리 (host port: 3307, docker port: 3306)

환경변수 주입

DB 연결 정보를 그대로 Github 업로드 시 보안 문제 발생

⇒ IntelliJ, Jenkins 환경 변수 설정

https://velog.io/@crow/Spring-boot-외부-환경변수-주입

https://choseongho93.tistory.com/309

이슈

  • 발생한 에러
    • 젠킨스 ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [127]]
    • 스프링부트
  • 해결책
// 도커 이미지 빌드 시 도커 파일에서 변수 사용 가능
docker build --build-arg DOCKERHUB_ID=${DOCKERHUB_ID} -t karmapol/dopamine_be:0.1 .

Docker image 빌드 시 실행되는 환경변수를 —build-arg 키워드로 넘겨줄 순 있지만, push한 이미지에는 들어가지 않는다.

⇒ 다른 서버에서 실행될 docker image에 환경 변수를 설정하기 위해서는 도커 스웜, Kubernetes 등 사용해야함

젠킨스 서버의 환경 변수를 배포 서버에 동적으로 넘기고 싶지만, 쿠버네티스 없이는 yml 파일이나 env 파일 생성해 넘겨주어야 했음
⇒ DB 유저 정보는 젠킨스에는 직접 작성하였음

보완할 점

추후에 배포 서버를 네이버 클라우드 서버로 옮기고, 도커 컴포즈 및 도커 스웜으로 한 서버에서 여러 컨테이너 및 데이터 관리

0개의 댓글