Skip to content

WoowaCrew CI CD 진행기

Park GyeongCheol edited this page Dec 24, 2019 · 1 revision

WoowaCrew CI

WoowaCrew 프로젝트에 적용한 CI 관련 문서

최종 목표

  1. develop 브랜치로 날아오는 PR에 대해 test, 테스트 커버리지, 코드 컨벤션 등을 검사하여 팀의 기준에 부합하지 않으면 반려 / 부합하면 팀원 간 코드리뷰 적용

  2. release 브랜치에 변화가 감지되면 ( push, merge 등 ) Jenkins가 이를 감지하여 테스트, 빌드, 배포 수행

CI 목표 구조

CI 목표 구조

1차 시도

2019.12.13 (금) 기준

단, Jenkins와 Docker에 대한 이해가 부족했고 PR 브랜치 감지 문제, 브랜치 배포 과정에서 Jenkins 컨테이너가 빌드하여 생성하는 jar 파일을 어떻게 배포할 지에 대한 의문이 듬.

현재는 Jenkins 컨테이너 내부에 jar 파일을 8000 포트로 배포한 후 EC2 컨테이너의 80 포트와 매핑하여 배포하는 중.

이 경우 Jenkins 컨테이너에 문제가 발생하여 컨테이너를 종료하더라도 배포된 jar 파일이 종료되는 문제가 발생한다.

이를 해결하기 위해 docker-compose, docker volume, network에 대한 학습이 필요해보임.

현재 구조

스크린샷, 2019-12-13 09-13-40

2차 시도

2019.12.24 (화) 기준

sonarqube 포기

jenkins CI와 sonarqube를 함께 연동하여 PR 브랜치에 대한 정적 분석을 시도하였다. 단, 다음 2가지 문제로 현재는 포기한 상태이다.

  1. Jenkins Job으로 정적분석 실행시 sonarqube가 메모리를 너무 많이 잡아먹는 문제 발생

Jenkins 실행시 ./gradlew clean classes로 classes 파일을 만든 후 정적분석을 실행하도록 Jenkins Job을 설계하였다. 이는 sonarqube가 .java파일 뿐만 아니라 .class파일까지 분석하기 때문이다. 때문에 sonar-project.properties에서 sonar.java.binaries에 class 파일의 위치를 지정해줘야했다.

이렇게 class 파일들을 만들어 낸 후 sonarqube가 정적분석을 시도한다. 하지만 이 때 너무나도 많은 메모리를 잡아먹는 것이 확인되었다. 오죽하면 위 Job이 실행될 때 Jenkins가 띄워진 EC2가 느려지면서 결국 Jenkins가 다운되는 현상까지 나타났다.

class 파일 만들어내는 것과 sonarqube 정적 분석을 분리하는 것도 하나의 방법이 될 수 있겠지만 Job에서 다른 Job으로 어떻게 trigger를 보내는 지는 아직 확인하지 못했다.

  1. PR 브랜치 대상 정적분석 실패

감사의 말

스크린샷, 2019-12-13 09-15-43

Clone this wiki locally