[Dev] CI/CD 적용하기 - 1. 빌드 및 테스트 자동화

2 minute read

안녕하세요. 진행하고 있는 프로젝트에 CI 및 CD 를 적용해보았고 적용하면서 겪은 시행착오를 세 편에 걸쳐 기록해보려고 합니다.

이번 게시글에서는 첫 번째 파트 CI 적용에 대해서 알아보겠습니다.

개발 환경

  • Spring Boot 2.4.5
  • Gradle 6.8.3
  • Travis CI

CI?

CI 는 Continuous Integration 의 약자로 ‘지속적 통합’ 을 의미합니다.

풀어서 말하자면 어플리케이션이 구동되기 위한 빌드와 테스트를 자동으로 수행하고 문제가 발생할 시 이를 해결할 수 있도록 만드는 작업입니다.

깃허브에 코드를 푸쉬할 때에는 빌드 및 테스트를 성공한 코드를 올리는 것이 기본적 원칙이지만 깜빡하거나 바빠서 이를 빼놓고 푸쉬할 때가 종종 있습니다.

이 때 푸쉬된 코드의 빌드 또는 테스트가 실패할 경우 어플리케이션 구동에 에러를 발생시키고 불안정한 서버를 초래하기 때문에 빌드 및 테스트를 자동화시켜 안정된 코드임을 확인할 수 있습니다.

CI 및 CD 에 대한 더욱 자세한 정보는 CI/CD(지속적 통합/지속적 제공): 개념, 방법, 장점, 구현 과정 또는 6) 스프링부트로 웹 서비스 출시하기 - 6. TravisCI & AWS CodeDeploy로 배포 자동화 구축하기 를 참고해주세요!

CI Tools

CI 를 지원하는 도구들에는 Travis, Jenkins, Github Action 등이 있습니다.

이번 프로젝트에서는 Travis 를 사용하였습니다.

Travis 페이지 설정

travis(org) org 도메인에 들어가보면

Since June 15th, 2021, the building on travis-ci.org is ceased. Please use travis-ci.com from now on.

org 도메인은 중지되었다는 문구가 상단에 표시됩니다. 따라서

travis(com) 으로 들어가서 이하의 작업을 해야 합니다.

회원이라면 Sign in, 아직 회원가입이 되지 않았다면 Sign up 부터 먼저 합니다.

대개 깃허브 계정과 연동하여 회원가입 및 로그인을 합니다.

travis 홈

travis 홈

로그인을 한 뒤 우측 상단의 프로필을 누르고 Settings 탭으로 들어가면 계정 설정으로 들어갈 수 있습니다.

계정 설정

프로필 세팅 화면

  • Repositories:
    • 연동된 깃허브 계정에서 Travis CI 를 적용할 레포지토리 리스트가 나타납니다.
    • Manage repositories on Github 버튼을 누르면 Travis 를 적용할 레포지토리를 고를 수 있습니다.

이외에도 API 토큰, 요금제 등을 설정할 수 있는 화면입니다.

대쉬보드

대쉬보드 화면

Dashboard 탭으로 들어가면 현재 Travis CI 에 등록된 레포지토리 목록을 확인할 수 있습니다.

프로젝트에서 파일 작성

웹에서의 Travis CI 기본 설정은 끝이 났고 이제 프로젝트에서 .travis.yml 파일을 생성합니다.


language: java

jdk:
  - openjdk11

branches:
  only:
    - travis-ci

cache:
  directories:
    - '$HOME/.m2/repository'
    - '$HOME/.gradle'

script: "cd back/ && ./gradlew clean build"

notifications:
  email:
    recipients:
      - kunga077@gmail.com
  • branches:
    • 푸시가 될 시 travis 에서 빌드를 수행할 브랜치입니다.
    • 하위 플래그로는 only, except 등이 있습니다.
    • 말 그대로 적용할 브랜치 또는 제외할 브랜치를 나타냅니다.
    • 브랜치 명에는 정규 표현식을 사용할 수도 있습니다.
    • 예를 들어 - /^deploy-.*$/ 를 추가하면 deploy- 로 시작하는 브랜치 모두를 설정할 수 있습니다.
  • cache.directories:
    • travis 서버에 캐시하여 같은 의존성일 경우 다시 받지 않도록 설정합니다.
  • script:
    • 푸시가 될 시 빌드를 수행할 명령어를 설정합니다.
  • notifications:
    • travis 수행이 완료될 시 알림받는 것을 설정합니다.
    • email 이외에도 slack 등으로 알림을 받아 볼 수 있습니다.
    • email 하위 플래그로 on_success, on_failure 있습니다.
    • always, never, change 를 사용할 수 있고 각각 항상 받거나, 안받거나, 빌드의 상태가 변경할 때 받는 경우를 설정할 수 있습니다.

주의점

.travis.yml 파일 위치

.travis.yml 파일은 항상 최상단 디렉토리에 있어야 합니다.

따라서 빌드를 수행할 gradlew 가 최상단이 아닌 하위 폴더에 있을 시 script 에 적절한 명령어를 작성해야 합니다.

작성을 한 뒤 commit/push 를 하고 travis 페이지에 접속합니다.

빌드 성공

빌드가 성공한 것을 확인할 수 있습니다.

이외에도 더 많은 변수를 적용하거나 플래그에 대한 더욱 자세한 내용을 확인하고 싶으시다면 Travis CI 문서 를 확인해주세요!

또한 README 에 travis 빌드 뱃지가 필요하시면 travis 뱃지 를 참고해주세요!

이상으로 Travis CI 를 통해 빌드 및 테스트를 자동화하였고 이에 대한 결과를 받아볼 수 있게 되었습니다.

다음 게시글에서는 AWS CodeDeploy 를 이용하여 EC2 서버에 자동으로 배포까지 하는 작업을 알아보겠습니다.

Leave a comment