본문 바로가기
카테고리 없음

[Tool, CI/CD] Jenkins

by hbIncoding 2023. 7. 19.

0. 기본 개념

 1. ssh(Secure Shell)

  • 원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜, 말그대로 보안 쉘이다.
  • 기존의 원격 접속에 사용하던 텔넷은 암호과가 없어 거기에 보안기능을 추가하여 1995년에 나온 프로토콜
  • 쉘로 원격 접속을 하는  것이므로 시본적으로 CLI 상에서 작업을 하게되며 기본 포트는 22번이다.

 2. CLI(Command Line Interface)

  • 명령 줄 인터페이서, 명령어 인터페이스로 텍스트 터미널을 통해 사용자와 컴퓨터가 상호작용하는 방식이다.
  • 현재는 GUI(Graphic User Interface)를 대부분 운영체제에서 지원한다.

1. CI/CD

 1-1. CI(Continous Intergration)

  • 여러명의 개발자가 코드 베이스를 계속해서 통합하는 것
  • 여러 개발자들의 코드를 각각 가능한 빠르게 배포하는 것
  • 즉 코드를 통합하는 것을 의미한다.

 1-2. CD(Continous Deployment or Continious Delivery)

  • Delivery
    • 내부 사용자(내부 QA, 마케터, 기획자 등)든, 사용자든 서비스를 지속적으로 배달
    • 즉 코드 베이스가 항상 배포 가능한 상태를 유지하는 것을 의미
  • Deployment
    • 코드 베이스를 사용자가 사용 가능한 환경에 배포하는 것을 자동화 하는 것
    • 버전 1쓰다가 끊키지 않고 배포하는 것을 말하는데 ECS를 사용하면 이를 편리하게 구축 가능
      • ECS : Amazon Elastic Container Service
  • 즉, CI/CD란 각각의 개발자들이 개발을 하는 개발환경을 사용자가 사용 가능한 서비스로 전달하는 모든 과정을 지속 가능한 형태로 또 가능하다면 자동으로 해서 개발자와 사용자 사이의 격차를 없애는 것이다. 이러한 과정에 코드를 빌드하고 테스트하고 배포하는 활동이 있다.

 1-3. CI/CD 파이프 라인

2. 젠킨스(Jenkins)

 1-1. 젠킨스 기본 개념

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

 1-2. 대표적인 Plugins

  • Credentials Plugin
    • 젠킨스는 단지 서버이기 때문에 배포에 필요한 각종 리소스에 접근하기 위한 여러가지 정보를 저장하고 있어야 한다
    • 리소스에는 클라우드 리소스 또는 베어메탈에 대한 ssh 접근 등을 의미한다.
      • 베어메탈 : 어떤 소프트웨어도 담겨 있지 않은 하드웨어
    • AWS token, Git access token, secret key, ssh(username, password) 등의 정보를 저장할 때 사용
    • 젠킨스는 Private Network에 떠있기 때문에 보안성이 좋다.
  • Git Plugin : git에 대한 소스코드를 긁어와서 빌드할 수 있도록 도와줌
  • Pipeline : 핵심 기능인 파이프라인도 플러그인이다.
  • Docker plugin & Docker Pipeline : Docker agent를 사용하고 jenkins에서 도커를 사용하기 위한 플러그인

 

3. 젠킨스의 pipeline 

 3-1. Pipeline

  • 파이프라인 : CI/CD파이플인을 젠킨스에서 구현하기 위한 플러그인들의 집합
  • 여러 플러그인들을 용도에 맞게 사용하고 정의함으로써 파이프라인을 통한 서비스가 배포 된다.
  • Pipeline DSL(Domain Specific Language)로 작성

 3-2. Pipeline을 구성하는 요소

  • 여러 플러그인들이 파이프 라인의 용도에 맞게 사용되고 정의된다.
  • 두 가지 형태의 Pipeline Syntax가 존재
    • Declarative(더 최신이고 가독성이 좋음)
    • Scripted Pipeline

4. Pipeline 구성 Sections

 4-1. Agent section

  • 젠킨스는 많은 일을 해야하기에 여러 node를 두고 일을 시킬 수 있는데, 어떤 젠킨스가 일을 할 것 인지 정한다.
  • 젠킨스 노드 관리에서 새로운 노드를 띄어구너 docker이미지를 통해 처리 가능
  • 젠킨스 노드뿐만 아니라 젠킨스 안에 있은 docker container에 들어가서 일을 시킬 수 도 있다.
    • "nodejs안에서 뭔가해" 라고 명령 가능

 4-2. Post section

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

 4-3. Stage Section

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

 4-4. Steps Section

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

5. Declaratives 문법

 5-1. Declaratives

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

 5-2. Declaratives의 단계

  • Environment

  • Parameter : 파이프라인 실행 시 파라미터를 받음
  • Triggers
    • 어떤 형태로 트리거 되는가?
    • 이 파이프라인이 어떤 주기로 실행 되는가?

  • when

 

6. Jenkins Pipeline 구성 예시

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

 

 

 

 

 

 

10. 참고자료

 1. ssh : https://velog.io/@hyeseong-dev/%EB%A6%AC%EB%88%85%EC%8A%A4-ssh%EB%9E%80

 

[리눅스] ssh란?

SSH는 무엇이고 어떻게 사용하며 어떤 부분이 편리한지에 대해 알아본다.SSH 에 대한 더 많은 정보는 링크를 참고하자.아래 내용은 macOS환경에 대해서만 다룬다. 일반적인 개발서버는 리눅스환경

velog.io

 2. CLI : https://medium.com/@psychet_learn/cli-cli-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B2%95-c8d000ebc162

 

 3. Jenkins : https://velog.io/@bbkyoo/Jenkins#:~:text=Jenkins%EB%8A%94%20%EA%B7%B8%EB%83%A5%20%EB%8B%A8%EC%A7%80%20%EC%84%9C%EB%B2%84,%EC%9E%88%EC%A7%80%20%EC%95%8A%EC%9D%80%20%ED%95%98%EB%93%9C%EC%9B%A8%EC%96%B4%EB%A5%BC%20%EA%B0%80%EB%A6%AC%ED%82%A8%EB%8B%A4.