24시간 365일 운영되는 서비스에서 배포 환경 구축은 필수다. 여러 개발자의 코드가 실시간으로 병합되고, 테스트가 수행되는 환경, master 브랜치가 푸시되면 배포가 자동으로 이뤄지는 환경을 구축해보자.

 

 

 

CI / CD란?


CI(Continuous Integration - 지속적 통합) : 깃에 푸시가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정

CD(Continuous Deployment - 지속적 배포) : CI로 생긴 빌드 결과물(Jar)을 자동으로 운영 서버에 무중단 배포하는 과정 

 

요약하면, 테스트/빌드/배포 자동화가 필요하다. 테스트와 빌드는 CI에서 담당하고, 배포는 CD에서 담당한다.

 

 

Travis CI 연동하기


Travis CI는 깃허브에서 제공하는 무료 CI 서비스다. 흔히 젠킨스 CI 도구도 있지만, 젠킨스는 설치형이다. 간단한 Travis를 사용해보자.

먼저 Travis 사이트에 들어간 후 깃허브 계정으로 로그인한다. 그 후 우측 프로파일을 클릭해 설정창으로 이동한다.

[그림 1] Travis CI 설정으로 이동

 

그러면 연동된 깃허브 계정의 리포지토리 목록이 나오는데, 원하는 리포를 활성화한다.

[그림 2] 연동된 리포지토리 활성화

 

활성화한 저장소를 클릭하면 다음과 같이 리포지토리 빌드 히스토리를 볼 수 있다.

[그림 3] 빌드 히스토리 목록

 

 

 

프로젝트 설정


Travis CI의 상세한 설정은 프로젝트에 존재하는 .travis.yml 파일로 한다. (build.gradle와 같은 최상위 위치에 둔다.)

language: java
jdk:
  - openjdk8
  
# Travis CI가 어느 브랜치가 푸시될 때 수행할지 설정한다. 
branches:
  only:
    - master
    
# 그레이들을 통해 의존성을 받게 되면 이를 해당 디렉토리에 캐시한다. 그 후 다음 배포 때부터
# 의존성이 같다면 다시 내려받지 않도록 설정한다.
cache:
  directories:
    - '$HOME/.m2/repository'
    - '$HOME/.gradle'
    
# master 브랜치에 푸시되었을 때 수행하는 명령
# gradlew를 통해 clean & buile를 수행한다.
script: "./gradlew clean build"

# CI 실행 완료 시 메일로 알람이 오도록 설정한다.
notifications:
  email:
    recipients:
      - seung7642@gmail.com

 

이제 master 브랜치로 깃허브에 푸시하면 연동된 Travis CI가 자동으로 테스트와 빌드를 실행한다.

 

 

 

참고자료


[1] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스_이동욱 저

[2] helloworld-88.tistory.com/50?category=667460