본문 바로가기
MJU Session (22-23)

[Session] CICD / 한규범

by 큐범 2023. 1. 9.

CI/CD 의미

CI ⇒ Continuous Intrgration (지속적 통합)

CD ⇒ Continous Delivery (지속적 전달)

CD ⇒ Continuous deployment (지속적 배포)

 

Continuous Intrgration

  • 개발자를 위한 자동화 프로세스인 지속적인 통합을 의미
  • 개발코드를 통합할 때 문제점을 해결하고, 자동화시켜 지속적으로 유지시키는 방법
  • 자동으로 빌드, 통합을 하고, 테스트를 하는 과정을 의미

Continous Delivery / Continuous Deployment

  • 지속적인 서비스 제공 / 지속적인 배포
  • 어플리케이션을 항상 신뢰가능한 수준으로 배포 될 수 있도록 지속적으로 관리
  • CI가 이루어지고 난 후에 우영환경까지 배포를 수행하여, 실제 사용자가 사용할 수 있도록 적용하는 단계

Test Change: Consumer Driven Testing(Contract Test)

  • What: 서비스 제공자와 사용자간 프로토콜, API 스펙, Kind Of Component Test
  • Why: 서비스 제공자가 내 서비스를 사용하는 소비자에 대한 정보 및 규약 유지

 

CI/CD 툴 종류

- Jenkins

- Github Actions

- TravisCI

- CircleCI

- ...

 

수동배포와 CICD 비교

수동배포의 워크 플로우

1. 개발자는 코드를 수정합니다.

2. 해당 코드를 형상관리 툴(Github, GitLab, ...)에 특정 branch 반영합니다.

3. 특정 branch를 main(default)브랜치와 머지 후 PR(Pull Requst)을 진행합니다.

4. 배포 서버에 접속 후 현재 배포 중인 프로그램(프로세스)를 종료시킵니다.

5. git pull을 통해 코드를 최신화합니다.

6-1. 개발자는 여기서 직접 빌드 및 테스트 구동을 합니다.

6-2. 오류가 발생할 경우 1번으로 돌아갑니다.

7. 배포가 완료됩니다.

 

CICD의 워크 플로우

현재 워크 플로우는 다음의 예시를 통해서 설명을 하겠습니다.

1. 개발자는 코드를 수정합니다.

2. 해당 코드를 형상관리 툴(Github, GitLab, ...)에 특정 branch 반영합니다.

3. 특정 branch를 main(default)브랜치와 머지 후 PR(Pull Requst)을 진행합니다.

<여기서 부터는 CICD가 이루어집니다>

4. jenkins는 WebHoook을 통해 최신화가 이루어진 코드를 받습니다.

5. 해당 코드를 Gradle을 통해 빌드 및 테스트 코드를 실행합니다.

6-1. 성공적으로 빌드가 이루어질 경우, 도커를 통해서 jar파일을 기반으로 이미지를 만들고 DockerHub에 Push하여 이미지를 최신화합니다.

6-2. 빌드에 실패할 경우 이전의 배포 상황으로 진행됩니다.

7. Jenkins 서버는 배포 서버와 연결을 통해 도커 이미지 Pull 명령어를 실행합니다.

8. 이미지를 기반으로 배포가 진행됩니다.

 

결론

수동배포의 경우, 개발자는 1번부터 7번의 과정을 모두 이해하고 있어야합니다. 반면 CICD가 적용된 경우, DevOps가 아닌 경우 1번에서 3번의 과정만 이해하여도 배포가 이루어집니다. 따라서, 개발자는 비즈니스 로직(코드)에 집중할 수 있습니다. CICD는 구축 방법이 쉬운 것은 아니지만 현재는 구축 성공 사례가 많으며 구축 방법만 익혀둔다면 수동배포의 불편함을 해소하여 배포시간을 크게 줄일 수 있습니다.

CICD의 핵심은 지속적인 통합과 지속적인 배포입니다. 단순히 툴에 집중하기 보다는 CICD의 기술의 목적을 다시 한번 생각하고 CICD를 적용하면 개발 프로세스의 방식이 어떻게 변화해야할지 고민해야합니다. 

 

It’s a simple set of questions, but it gets to the core of what Continuous Integration is about. The whole idea is that nobody is working on a code base that deviates significantly from anyone else’s. Continuous Integration means the team knows what the current state of the code truly is, we avoid big risky merges, and people can refactor as much as they need to.

Martin Fowler - ContinuousIntegrationCertification

 

Refernce.

 

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

CI/CD는 애플리케이션의 통합 및 테스트부터 제공 및 배포까지 전체 라이프사이클에서 지속적인 자동화와 모니터링을 제공합니다. 개념, 차이점, 학습방법(인강)을 보세요.

www.redhat.com

 

bliki: ContinuousIntegrationCertification

Jez Humble designed a simple, three-part certification test for people doing Continuous Integration. Few pass it.

martinfowler.com