CI, CD

이혜령·2023년 9월 5일
0

현장실습

목록 보기
5/8
post-thumbnail

CI

CI(Continuous Integration)
: 빌드/테스트 자동화 과정. 개발자를 위한 자동화 프로세스인 지속적인 통합을 의미한다.

한 마디로 여러 개발자들의 코드를 계속해서 통합하는 것이다.

CI를 왜 사용하는가?

  • CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 레포지토리에 통합된다.
  • 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.
  • 소스/버전 관리 시스템에 대한 변경 사항을 정기적으로 커밋하여 모든 사람에게 동일 작업 기반을 제공하는 것으로 시작한다.
  • 커밋할 때마다 빌드와 일련의 자동 테스트가 이루어져 동작을 확인하고, 변경으로 인해 문제가 생기는 부분이 없도록 보장한다.

CD

CD(Continuous Delivery)
: 배포 자동화 과정. 지속적인 서비스 제공 or 지속적인 배포를 의미한다.

한 마디로 지속적으로 배포 가능한 상태를 유지하는 것이다.

CD를 왜 사용하는가?

  • 지속적인 서비스 제공, 지속적인 배포. 이 두 용어는 사옿 교환적으로 사용된다.
  • 두 용어 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루 어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.
  • 지속적 배포는 빌드, 테스트 및 배포 단계를 자동화하는 DevOps 방식을 논리적 극한까지 끌어올립니다.
  • 코드 변경이 파이프라인의 이전 단계를 모두 성공적으로 통과하면 수동 개입 없이 해당 변경 사항이 프로덕션에 자동으로 배포된다. 품질 저하 없이 최대한 빨리 사용자에게 새로운 기능을 제공할 수 있게 된다.
  • 입증된 지속적 통합 및 지속적인 전달 단계를 기반으로 한다.
  • 간단한 코드 변경이 정기적으로 마스터에 커밋되고, 자동화된 빌드 및 테스트 프로세스를 거치며 다양한 사전 프로덕션 환경으로 승격되며, 문제가 발견되지 않으면 최종적으로 배포된다.

CI/CD 파이프 라인?

CI/CD를 정리하다 보니 계속 나오는데 무슨 말인지 몰라서 찾아봤다.

파이프 라인(Pipe Line)은 코드를 빌드, 테스트, 배포하는 과정을 거쳐 소프트웨어 개발을 추진하는 프로세스이다.

  • 프로세스를 자동화함으로써 인적 오류를 최소화하고 소프트웨어 출시 방식에 일관된 프로세스를 유지하는 것을 목표로 한다.
  • 파이프 라인에 포함된 툴에는 코드 컴파일, 유닛 테스트, 코드 분석, 보안, 바이너리 생성 등이 있다.

둘이 그냥 비슷한 의미였다.(아니면 알려주세요 저도 잘 모릅니다...)

CI/CD의 종류

  • Jenkins
  • CircleCI
  • TravisCI
  • Github Actions

이 외에도 다양한 CI/CD가 있다.

Jenkins

Java Runtime 위에서 동작하는 자동화 서버이다.

  • 다양한 플러그인들을 활용해서 각종 자동화 작업을 처리할 수 있다.
  • AWS 배포, 테스트, Docker 빌드 등 각각의 컴포넌트들이 하나의 플러그인으로 모듈화 되어 있어, 이를 사용하면 된다.
  • 가장 핵심적인 파이프 라인, 시크릿 키마저도 플러그인으로 동작시킬 수 있다.
  • 즉 일련의 자동화 작업의 순서들의 집합인 파이프 라인을 통해 CI/CD 파이프 라인을 구축한다.
  • 플러그인들을 잘 조합해서 돌아가게 하는 게 파이프 라인이라고 할 수 있다.

Jenkins의 대표 플러그인

  • Credentials Plugin
    • Jenkins는 그냥 단지 서버이기 때문에 배포에 필요한 각종 리소스에 접근하기 위해서는 여러 가지 중요 정보들을 저장하고 있어야 한다.
    • AWS token, Git access token, secret key, ssh(username, password) 등의 정보들을 저장할 때 사용한다.
    • 위와 같은 중요한 정보들을 저장해주는 플러그인이다.
  • Git Plugin
    : Jenkins에서 git에 대한 소스 코드를 긁어와서 빌드할 수 있도록 도와주는 플러그인이다.
  • Pipeline
    : 핵심 기능인 파이프 라인마저 플러그인이다.
  • Docker plugin and Docker Pipelin
    : Docker agent를 사용하고 Jenkins에서 Docker를 사용하기 위한 플러그인

Jenkins의 Pipeline

Pipeline

  • pipeline이란 CI/CD 파이프라인을 젠킨스에 구현하기 위한 일련의 플러그인들의 집합이자 구성
  • 즉 여러 플러그인들을 이 파이프라인에서 용도에 맞게 사용하고 정의함으로써 파이프라인을 통한 서브시가 배포된다.
  • pipeline DSL(Domain Specific Language)로 작성된다.
  • Jenkins가 동작되기 위해서는 여러 플러그인들이 파이프라인을 통해 흘러가는 과정이라고 할 수 있다.

Pipeline의 Section

Agent Section

  • Jenkins는 많은 일을 해야 하기 때문에 혼자 하기 버겁기에, 여러 slave node를 두고 일을 시킬 수 있다.
  • 이처럼 어떤 Jenkins가 일을 하게 할 것인지를 지정한다.
  • Jenkins node만 넣을 수 있는 것이 아니라 Jenkins 안에 있는 docker container에 들어가서 일을 시킬 수도 있다.

Post Section

  • 스테이지가 끝난 이후의 결과에 따라서 후속 조치를 취할 수 있다.
  • 작업 결과에 따른 행동을 취할 수 있다.

Stage Section

  • 어떤 일들을 처리할 것인지 일련의 stage를 정의하는 것으로, 일종의 카테고리라고 보면 된다.

Steps Section

  • 한 스테이지 안에서의 단계로 일련의 스텝을 보여준다.
  • Steps 내부는 여러 가지 step들로 구성되며 여러 작업들을 실행 가능하다.
  • 플러그인을 깔면 사용할 수 있는 step들이 생겨난다.
  • 빌드를 할 때, 디렉토리를 옮겨서 빌드를 한다거나, 다른 플러그인을 깔아서 해당 플러그인의 메서드를 활용해서 일을 처리한다던지 하는 작업들을 할 수 있다.
profile
배운 거 대충 정리하는 블로그

0개의 댓글