젠킨스(Jenkins)

윤준혁·2024년 2월 25일

젠킨스(Jenkins)란?

  • Java Runtime Environment에서 동작하고, 빌드, 테스트, 배포 등 모든 것을 자동화 해주는 자동화 서버
  • 다양한 플러그인을 활용해서 각종 자동화 작업을 처리할 수 있음
  • 일련의 자동화 작업의 순서들의 집합인 Pipeline을 통해 CI/CD 파이프라인을 구축함

대표적인 플러그인

  • Credentials Plugin : Jenkins는 그냥 서버일 뿐이기 때문에 배포에 필요한 각종 리소스(가령 클라우드 리소스 혹은 베어메탈에 ssh 접근 등)에 접근하기 위해서는 여러가지 중요 정보들을 저장하고 있어야 함. 이런 중요한 정보(AWS token, Git access token, etc..)들을 저장해 주는 플러그인
  • Git Plugin
  • Docker plugin and Docker Pipeline : Docker agent를 사용하고 Jenkins에서 도커를 사용하기 위함
  • Pipeline(핵심 기능인 파이프라인 마저도 플러그인) : CI/CD 파이프라인을 젠킨스에 구현하기 위한 일련의 플러그인들의 집합이자 구성. 즉, 여러 플러그인들을 이 파이프라인에서 용도에 맞게 사용하고 정의함으로써 파이프라인을 통해 서비스가 배포됨(Pipeline DSL로 작성)
  • 처음에는 Recommend 해주는 것을 깔면 어지간한건 다 깔려있음

Pipeline Syntax

  • Sections
    1. Agent Section : 여러 slave node를 두고 일을 시킬 수 있는데, 이처럼 어떤 젠킨스가 일을 하게 할 것인지를 지정. 젠킨스 노드관리에서 새로 노드를 띄우거나 혹은 docker 이미지 등을 통해서 처리할 수 있음
    1. Post Section : 스테이지가 끝난 이후의 결과에 따라서 후속 조치를 취할 수 있음( ex) success, failure, always, cleanup)
    2. Stages Section : 어떤 일들을 처리할 건지 일련의 stage를 정의함
    3. Steps Section : 한 스테이지안에서의 단계로 일련의 step을 보여줌
  • Declaratives
    1. Environment : 어떤 pipeline이나 stage scope의 환경 변수 설정
    1. Parameter : 파이프라인 실행 시 파라미터 받음
    2. Triggers : 어떤 형태로 트리거 되는가
    3. When : 언제 실행되는가
  • Steps
    - Steps 내부는 여러가지 스텝들로 구성
    • 여러 작업들을 실행가능
    • 플러그인을 깔면 사용할 수 있는 스텝들이 생겨남

개발 환경의 종류

  • 개발자가 개발을 하는 Local 환경
  • 개발자들끼리 개발 내용에 대한 통합테스트를 하는 Development 환경(DEV)
  • 개발이 긑나고 QA 엔지니어 및 내부 사용자들이 사용해 보기 위한 QA 환경(QA)
  • 실제 유저가 사용하는 Production 환경(PROD)

개발 프로세스

  1. 개발자가 자신의 PC에서 개발
  2. 다른 개발자가 작성한 코드와 차이가 발생하지 않는지 내부 테스트 진행
  3. 진행한 내용을 다른 개발자들과 공유하기 위해 git과 같은 SCM에 올림(흔히 dev 브랜치)
  4. Dev브랜치의 내용을 개발 환경에 배포하기 전에 테스트와 Lint 등 코드 포맷팅
  5. 배포하기 위한 빌드
  6. 코드 배포
  7. 테스트 진행
  8. 위 모든 과정을 DEV, QA, PROD 환경에서 모두 하고 각각에 맞는 환경에 맞게 배포
  • 여러 배포환경의 관리에서 핵심은 인프라를 모듈화 하여 어떤 것이 변수인지 잘 설정하고 이를 잘 설계하는 것
  • 가령 APP_ENV처럼 현재 배포하고자 하는 것이 무슨 환경인지 설정하고, 앱 내에서 사용하는 다양한 변수들을 APP_ENV에 맞게 잘 가져다 쓰는것이 핵심
  • 서비스 내부의 변수 뿐만 아니라 클라우드 리소스를 많이 활용해서 개발하는 요즘에는 클라우드 리소스 내에서 인프라별 키관리가 매우 중요해서 awssystem manager의 parameter store와 같은 키 관리 서비스를 쓰는 것을 추천

AWS 리소스

S3

  • Simple Storage Service의 약자로 클라우드 스토리지
  • 정적 웹사이트 코드 배포에 용이
  • 정적 웹사이트 호스팅에 필요한 다양한 기능 제공
  • AWS Cloudfront와 함께 사용해서 최적화 가능하고 DNS 관리도 가능

ECR

  • Elastic Container Registry
  • 도커 이미지를 저장하는 프라이빗 레포지토리

ECS

  • Elastic Container Service
  • 도커 컨테이너 기반으로 서비스 운용을 가능하게 해주는 간단한 서비스
  • 무중단 배포를 제공하며 scale up이 가능한 특징
  • 백엔드 서비스를 스케일업 가능한 형태로 배포하는데 최적화
  • 수 많은 도커 컨테이너 서버를 띄우고 LB가 이들 사이에 밸런싱을 해줌
  • fargate, ec2 모드가 있어서 docker container 리소스만 띄우거나 혹은 물리적인 EC2 instance 클러스터로 구성 가능

결론 => EC2 혹은 k8s 등을 통해 rolling deploy가 처리되기 때문에 Jenkins의 역할은 배포 명령만 내림

0개의 댓글