CI/CD와 Jenkins

Jinjin·2023년 8월 3일
0
post-thumbnail

1. CI/CD

  • CI란? (Continuous Integration = 지속적 통합)
    : 빌드/테스트 자동화 과정이다, CI를 성공적으로 구현할 경우 어플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합된다.

    ✔️ 여러 명의 개발자가 동시에 어플리케이션 개발과 관련된 코드 작업을 할 경우에 서로 충돌할 수 있는 문제를 해결한다.

    ✔️ 소스/버전 관리 시스템에 대한 변경 사항을 정기적으로 커밋하여 모든 사람에게 동일한 작업 기반을 제공한다.

    ✔️ 커밋할 때마다 빌드와 일련의 자동 테스트가 이루어져 동작을 확인하고 변경으로 인해 문제가 생기는 부분이 없도록 보장한다.


  • CD란? (Continuous Delivery, Continuous Deployment)
    : 배포 자동화 과정이다.
    ✔️ 빌드, 테스트, 배포 단계를 자동화하는 DevOps 방식을 논리적 극한까지 끌어 올린다.
    ✔️ 코드 변경이 파이프라인의 이전 단계를 모두 성공적으로 통과하면 수동 개입 없이 해당 변경 사항이 프로덕션에 자동으로 배포된다.
    ✔️ 간단한 코드 변경이 정기적으로 마스터에 커밋되고, 자동화된 빌드 및 테스트 프로세스를 거치며 다양한 사전 프로덕션 환경으로 승격되며, 문제가 발견되지 않으면 최종적으로 배포된다.

2. Jenkins

[젠킨스의 기본 개념]

  • Java Runtime Environment에서 동작한다.
  • 다양한 플러그인들을 활용해서 각종 자동화 작업을 처리할 수 있다.(사용자에 맞게 커스터마이징)
  • AWS 배포, 테스트, 도커 빌드 등 할게 너무 많아서 각각의 컴포넌트들을 하나의 플러그인으로 모듈화했는데 이를 활용해서 사용하면 된다.
  • 파이프라인, 시크릿 키마저도 플러그인으로 동작시킬 수 있다.
  • 일련의 자동화 작업의 순서들의 집합인 Pipeline을 통해 CI/CD 파이프라인을 구축한다.
  • 플러그인들을 잘 조합해서 돌아가게 하는 게 Pipeline이라고 할 수 있다.

[젠킨스의 대표 플러그인]

  • Credentials Plugin
    • Jenkins는 단지 서버이기 때문에 배포에 필요한 각종 리소스에 접근하기 위해서는 여러 가지 중요 정보들을 저장하고 있어야 한다.
    • AWS token, Git access token, secret key, ssh(username, password) 등의 정보들을 저장할 때 사용한다.
    • 위와 같이 중요한 정보들을 저장해주는 플러그인
    • 젠킨스는 Private Network에 떠있기 때문에 보안상 너무 걱정하지 않아도 괜찮다.
  • Git Plugin
    • jenkins에서 git에 대한 소스 코드를 긁어와서 빌드할 수 있도록 도와준다.
  • Pipeline
    • 핵심 기능인 파이프라인마저도 플러그인이다.
  • Docker Plugin and Docker Pipeline
    • Docker Agent를 사용하고 jenkins에서 도커를 사용하기 위한 플러그인

[젠킨스의 Pipeline 깊게 살펴보기]

  • Pipeline

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

    • 두 가지 형태의 Pipeline Syntax가 존재함
      • Declarative (더 최신이고 가독성이 높음)
      • Scripted Pipeline
  • Pipeline의 Section의 구성

    • Sections
      - Agent section
      - Post section
      - State section
      - Steps section

    • Pipeline의 Section 깊게 알아보기
        1. Agent section
          • 어떤 젠킨스가 일을 하게 할 것인지를 지정한다.
          • 젠킨스 노드 관리에서 새로 노드를 띄우거나 혹은 docker 이미지를 통해 처리할 수 있다.( 👌 젠킨스를 이용해서 시종을 여러 명 둘 수 있는데 어떤 시종에게 일을 시킬 것이냐 하는 것을 결정한다.)
          • 예를 들어 젠킨스 인스턴스가 서버 2대에 각각 떠있는 경우, 마스터에서 시킬 것인지 slave에서 시킬 것인지 결정할 수 있다.
          • 젠킨스 노드만 넣을 수 있는 것이 아니라 젠킨스 안에 있는 docker container에 들어가서 일을 시킬 수도 있다.


참고 : https://seosh817.tistory.com/104#google_vignette 참고 : https://velog.io/@bbkyoo/Jenkins
profile
BE Developer

0개의 댓글