CI/CD란?

zziano·2022년 5월 26일
0

CI/CD

어플리케이션 개발 단계를 자동화하여 어플리캐이션을 보다 짧은 주기로 고객에게 제공하는 방법, 새로운 코드 통합으로 개발 및 운영팀에게 발생하는 문제(intergration hell)을 해결하기 위한 솔루션이다.

이미지 출처 : RedHat

CI (Continuous integration)

'지속적인 통합' 이라는 뜻이며 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합되는 것을 의미

CI가 필요한 환경은?

  • 다수의 개발자가 형상관리 툴을 공유하며 사용하는 환경
    다수의 개발자가 한 팀으로 작업하는 경우, 공유 레포지토리에 많은 commit이 쌓이게 되는데 기능별로 빌드/테스트/병합 까지 하려면 매우 번거롭다!
    이런 상황에서 자동화된 빌드&테스트는 원천 소스코드의 충돌 등을 방어할 수 있다.
  • MSA(Micro Service Archietecture) 환경
    기존의 어플리케이션이 모든 기능을 포함하는 하나의 거대한 서비스였다면, MSA는 작은 기능별로 서비스를 잘게 쪼개어 개발하는 형태, MSA 환경에서는 대부분 애자일 방법론이 적용되기 때문에, 기능 추가가 매우 빈번하게 발생
    -> CI의 적용은 기능 충돌 방지 등을 제공

따라서 CI의 핵심 목표는
1. 버그를 신속하게 찾아 해결
2. 소프트웨어의 품질 개선
3. 새로운 업데이트 검증 및 릴리즈 시간 단축

CD(Continuous Delivery)

혹은 'Continuous Depolyment'
지속적인 서비스 제공, 지속적인 배포

Continuous Delivery는 공유 레포지토리로 자동으로 Release,
Continuous Deployment는 Production 레벨까지 자동으로 deploy

사진 출처 : 드림코딩 엘리

-> CI가 새로운 소스코드의 빌드, 테스트, 병합까지 의미하면, CD는 개발자의 변경 사항이 레포지토리를 넘어, 고객의 Production 환경까지 릴리즈 되는 것을 의미


Github Actions

지금 프로젝트에서 배포 후 잦은 오류 수정으로 수동 배포에 시간을 너무 쏟는 것 같아 자동 배포를 도입했다. CI/CD 툴로는 jenkins, Travis 등 많은 툴이 있지만 나는 그나마 진입장벽이 낮고 다른 툴보다 시도하기 쉬워 보이는 Github Actions를 사용하여 자동배포 환경을 구축했다. 시간이 나면 어떻게 사용했는지 글을 남겨보도록 하겠다..!

참고
https://youtu.be/0Emq5FypiMM
https://artist-developer.tistory.com/24
https://www.redhat.com/ko/topics/devops/what-is-ci-cd

profile
Onion on Sale

0개의 댓글