CI/CD, Jenkins, Travis

CI/CD

Posted by Yan on August 2, 2022

CI/CD

애플리케이션 개발 단계를 자동화하여 좋은 품질의 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법.

  • 지속적인 통합 Continuous Integration
  • 지속적인 전달 Continuous Delivery
  • 지속적인 배포 Continuous Depolyment

ci/cd

지속적인 통합 CI

  • 지속적으로 코드들의 통합을 진행하면서 코드의 품질을 유지하기 위한 방법
  • 빌드, 테스트, 병합
  • 시스템 개발을 하는 동안 여러 개발자들이 특정 시점에 개발된 코드를 모두 병합하기는 힘들기 때문에, 빌드, 테스트, 머지를 자동화된 프로세스를 이용해 최대한 자주 코드를 통합하기 위함
  • local에 적용한 변경 사항이 병합되면 이러한 변경 사항이 애플리케이션을 손상시키지 않도록 자동으로 애플리케이션을 구축하고 각기 다른 레벨의 자동화 테스트(일반적으로 단위 테스트 및 통합 테스트) 실행을 통해 변경 사항이 애플리케이션에 제대로 적용되었는지를 확인

CI Tool

  • Hudson
  • Bamboo
  • Jenkins

Jenkins vs Travis CI

💡 서버

  • Jenkins는 별도의 인스턴스가 필요하다. 서버 기반이다.
  • Travis CI는 웹 서비스 형태여서 별도의 인스턴스가 필요 없다. 클라우드 기반이다.

💡 커스터마이징

  • Jenkins는 정교한 설정이 필요하다. 제공되는 기본 설정이 없고, 시스템에서 모든 것을 구성해야 한다.
  • Travis는 시작하는 데 시간이 훨씬 적게 걸린다. config파일(yml)을 만들고 통합을 시작한다.

💡 비용

  • Jenkins는 무료다.
  • Travis는 오픈 소스 프로젝트는 무료 10,000크레딧을 제공하고, 기업용은 유료다.
Travis CI

spring boot에서 Travis CI를 구동시키려면, build.gradle과 같은 위치에서 .travis.yml파일을 만들어서 아래와 같이 설정해준다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
language: java
jdk: openjdk11

branches:
  only: master

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

before_install:
  - chmod +x gradlew

script: "./gradlew clean build"

notifications:
  email:
    recipients:
      - 이메일주소
  1. branches
    • Travis CI 를 어느 branch 가 push 될 때 수행할지 설정
    • 예시는 master 브랜치에 push될 때만 수행한다고 설정한 것이다.
  2. cache
    • gradle 통해 의존성을 받게 되면 해당 디렉토리에 cache 하여, 같은 의존성은 다음 배포 때부터 받지 않도록 설정
  3. script
    • branch 에 push 되었을 때 수행하는 명령어
  4. notifications
    • Travis CI 실행 완료 후 자동 알림 설정

CI 동작하는 과정

  1. 개발자가 코드를 작성하고 공유 저장소(Git)에 변경 사항을 커밋한다.
  2. 그 후 CI 서버는 리포지토리를 모니터링하고 모든 변경 사항을 평가한다.
  3. CI는 시스템을 구축하고 통합 및 단위 테스트를 수행한다.
  4. 서버가 배포 가능한 앱을 릴리스한다.
  5. CI 서버는 버전 및 빌드된 코드에 빌드 태그를 할당한다.
  6. 그런 다음 CI 서버는 성공적인 빌드에 대해 개발 팀에 보고한다. 만약 테스트가 실패하면 서버는 개발 팀에 이벤트에 대해 경고를 보낸다.

지속적인 전달 CD

  • 자동화된 프로세스를 통해 빌드, 테스트, 병합 과정을 거친 후 원격 레포지토리에 자동으로 업로드
  • 효과적으로 지속적인 전달을 수행하기 위해 지속적인 통합에서 지속적인 전달까지 파이프라인 연결 필요

지속적인 배포 CD

  • 지속적인 제공의 확장된 형태
  • 애플리케이션을 production 환경으로 배포하는 작업을 자동화한 것
  • repository의 코드 변경이 감지되면, 변경된 내용들은 고객이 사용 가능한 프로덕션 환경까지 자동으로 release
  • 해당 프로세스는 비즈니스적인 결정 후 관리자에 의해 진행
reference

CI/CD(지속적 통합/지속적 제공): 개념, 방법, 장점, 구현 과정 CI/CD란 무엇인가?