Jenkins란? (CI / CD와 Jenkins의 개념부터 ~ 예시 pipeline 까지)

Q·2023년 2월 5일
9

Jenkins

목록 보기
1/4

1. CI / CD 란 무엇인가?

1.1 CI란

  • Continuous Integration을 말한다 => 무엇을 통합한다는 것일까?
  • 기본적으로 코드이다.
  • 여러 명의 많은 개발자들이 코드 베이스를 계속해서 통합하는 것이다.
  • 여러 개발자들의 코드를 각각 가능한 빠르게 배포를 하는 것을 의미한다.
  • 즉 코드를 통합한다는 것이다.

1.2 CD란

  • Continuous Delivery => 무엇을 배달
    • 내부 사용자(내부 QA, 마케터, 기획자)든, 사용자든 서비스를 지속적으로 배달한다.
    • 즉 코드 베이스가 항상 배포 가능한 상태를 유지하는 것을 의미한다.
  • Continuous Deployment
    • 코드 베이스를 사용자가 사용 가능한 환경에 배포하는 것을 자동화하는 것이다.
    • 버전 1 쓰다가 끊키지 않고 배포하는 것을 말하는데 ECS를 사용하면 이를 편리하게 구축할 수 있다.

즉, CI/CD란 각각의 개발자들이 개발을 하는 개발환경을 사용자가 사용 가능한 서비스로 전달하는 모든 과정을 지속 가능한 형태로 또 가능하다면 자동으로 해서 개발자와 사용자 사이의 격차를 없애는 것이다. 이러한 과정에는 코드를 빌드하고, 테스트하고 배포하는 활동이 있다.

1.3 CI/CD 파이프라인

2. 젠킨스란 무엇인가?

2.1 젠킨스 기본 개념

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

2.2 젠킨스의 대표 Plugins

  • Credentials Plugin
    • Jenkins는 그냥 단지 서버이기 때문에 배포에 필요한 각종 리소스에 접근하기 위해서는 여러 가지 중요 정보들을 저장하고 있어야 한다.
    • 리소스에는 클라우드 리소스 혹은 베어메탈에 대한 ssh 접근 등을 의미한다.
    • 베어메탈이란 어떠한 소프트웨어도 담겨 있지 않은 하드웨어를 가리킨다.
    • 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에서 도커를 사용하기 위한 플러그인

3. 젠킨스의 PinpeLine 깊게 살펴보기

3.1 Pipeline

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

3.2 Pipeline을 구성하는 요소

  • 파이프라인이란 CI/CD 파이프라인을 젠킨스에 구현하기 위한 일련의 플러그인들의 집합이자 구성.
  • 즉 여러 플러그인들을 이 파이프라인에서 용도에 맞게 사용하고 정의함으로써 파이프라인을 통해 서비스가 배포됨.
  • 두 가지 형태의 Pipeline Syntax가 존재
    • Declarative (더 최신이고 가독성이 좋음)
    • Scripted Pipeline

3.3 Pipeline의 Section의 구성

  • Sections (가장 큰 개념)
    • Agent section
    • Post section
    • State section
    • Steps section

4. Pipeline의 Section 깊게 알아보기

4.1 Agent section

  • 젠킨스는 많을 일을 해야 하기 때문에 혼자 하기 버겁다.
  • 여러 slave node를 두고 일을 시킬 수 있는데, 이처럼 어떤 젠킨스가 일을 하게 할 것인지를 지정한다.
  • 젠킨스 노드 관리에서 새로 노드를 띄우거나 혹은 docker이미지를 통해 처리할 수 있다.
  • 쉽게 말하면 젠킨스를 이용하여 시종을 여러 명 둘 수 있는데 어떤 시종에게 일을 시킬 것이냐 하는 것을 결정하는 것이다.
  • 예를 들어 젠킨스 인스턴스가 서버 2대에 각각 떠있는 경우, 마스터에서 시킬 것인지 slave에서 시킬 것인지를 결정할 수 있다.
  • 젠킨스 노드만 넣을 수 있는 것이 아니라 젠킨스 안에 있는 docker container에 들어가서 일을 시킬 수도 있다.
  • "nodejs안에서 뭔가를 해"라고도 명령을 시킬 수 있다.

4.2 Post section

  • 스테이지가 끝난 이후의 결과에 따라서 후속 조치를 취할 수 있다.
  • 각각의 단계별로 구별하면 다음과 같다.
  • 성공 시에 성공 이메일, 실패하면 중단 혹은 건너뛰기 등등, 작업 결과에 따른 행동을 취할 수 있다.

4.3 Stage Section

  • 어떤 일들을 처리할 것인지 일련의 stage를 정의한다.
  • 일종의 카테고리라고 보면 됨.
  • ex) 프론트엔드 배포를 위한 스테이지, 등

4.4 Steps Section

  • 한 스테이지 안에서의 단계로 일련의 스텝을 보여줌.
  • Steps 내부는 여러 가지 스텝들로 구성되며 여러 작업들을 실행 가능
  • 플러그인을 깔면 사용할 수 있는 스텝들이 생겨남
  • 빌드를 할 때 디렉터리를 옮겨서 빌드를 한다던가, 다른 플러그인을 깔아서 해당 플러그인의 메서드를 활용해서 일을 처리한다던지 하는 작업들을 할 수 있다.
  • 플러그인을 설치하면 쓸 수 있는 Steps들이 많아진다.

5. Declaratives 문법 알아보기

5.1 Declaratives

  • Environment, stage, options, parameters, triggers, when 등의 Declarative가 있음
  • 각 stage안에서 어떠한 일들을 할 것인지 정의하는 게 Declarative이다.

5.2 Declaratives의 단계

  • Enviroment

  • Parameter

    • 파이프라인 실행 시 파라미터 받음
  • Triggers

    • 어떤 형태로 트리거 되는가?
    • 이 파이프라인이 어떤 주기로 실행이 되는가?
  • When

6. Jenkins Pipeline 구성 예시

6.1 예시 코드

  • pipeline => agent => stage=> step 순으로 작업이 세분화된다.
  • 위에서는 git에서 branch를 받아와서 디렉터리를 바꾸고 s3파일 업로드를 한 뒤 로그를 찍는 젠킨스 파이프라인의 예제이다.

참고

profile
Data Engineer

0개의 댓글