dayne의 블로그

Jenkins 설명 및 설치 과정 본문

CI CD/Jenkins

Jenkins 설명 및 설치 과정

dayne_ 2024. 10. 24. 11:30

목차

1. Jenkins 개념

2. Jenkins 동작 과정

 

 


1. Jenkins 개념

Jenkins를 설명하기 이전에, 먼저 CI / CD에 대한 이해가 필요합니다.

참고 : https://dayne-w.tistory.com/15

 

Jenkins는 CI / CD 환경 구축을 위한 오픈 소스 도구로, 소프트웨어 개발 생명주기를 자동화함으로써 개발 생산성을 높일 수 있습니다.

 

Jenkins를 사용하면 코드 변경 사항이 발생할 때마다 자동으로 빌드, 테스트 배포하는 과정을 수행할 수 있습니다.

따라서 개발자는 코드 변경에 대한 빌드 및 테스트 과정을 수동으로 진행할 필요가 없어지며, 변경 사항에 대한 신속한 검증 및 배포가 가능해지고, 이 과정에서 발생 가능한 휴먼 에러를 방지할 수 있습니다.

 

아래는 Jenkins 사용 시의 장점입니다.

  • 편리한 설정
    • 웹 기반의 콘솔로 다양한 인증 기반과 결합이 가능하며, 권한 관리 기능을 통해 안전한 빌드 / 배포 환경을 구축할 수 있습니다.
    • 빌드 / 배포에 대해 통지를 받을 수 있는 설정이 간편합니다.
  • 안정적인 빌드 / 배포 환경
    • 소스 버전 관리 툴과 연동하여 코드 변경을 감지하고, 자동화 테스트를 포함한 빌드를 수행하여 소프트웨어 품질을 향상시킬 수 있습니다.
    • 유닛 테스트, 통합 테스트 등의 테스트 과정을 설정할 수 있고, 테스트 결과에 대한 피드백을 받아 잠재적 오류를 사전에 예방할 수 있습니다.
    • 빌드 결과물을 지속적으로 배포하도록 설정해, 개발 프로세스 전체를 자동화할 수 있습니다.

 

 


2. Jenkins 동작 과정

출처 : https://seongwon.dev/DevOps/20220717-CICD%EA%B5%AC%EC%B6%95%EA%B8%B02/

 

Jenkins는 Maser / Slave라는 구조로 동작합니다.

  • Master는 controller라고 불리며, Jenkins slave를 관리하고 작업 스케줄링과 slave 모니터링을 포함하여 다양한 작업들을 수행합니다.
  • Slave는 agent라고 불리며, 실제 파이프라인 작업을 수행합니다. 다양한 환경에서 작동하며 작업을 분산시켜 부하를 감소시키는 역할을 담당합니다. agent는 로컬 또는 클라우드 컴퓨터를 통해 Jenkins controller에 연결될 수 있어, 다양한 유연성을 제공합니다.
    • Webhook
      • 특정한 애플리케이션이 다른 애플리케이션으로 이벤트 발생 정보를 실시간으로 제공하기 위한 방법입니다.
      • 젠킨스는 외부에 Webhook URL을 열어두고, Github로부터 이 Webhook URL로 요청을 받아 이벤트가 발생한 즉시 그 사실을 알 수 있습니다.

 

위의 사진에 대해 좀 더 자세히 설명하겠습니다.

  1. Github에서 Main Branch로 Push(Merge)
    • 개발자가  Github 저장소의 메인 브랜치에 코드를 푸시하거나 PR을 머지합니다.
  2. Webhook을 통한 Jenkins 트리거
    • Github에서 발생한 Push / Merge 이벤트가 Webhook을 통해 Jenkins에 전달됩니다.
    • Webhook
      • 특정한 애플리케이션이 다른 애플리케이션으로 이벤트 발생 정보를 실시간으로 제공하기 위한 방법입니다.
      • 젠킨스는 외부에 Webhook URL을 열어두고, Github로부터 이 Webhook URL로 요청을 받아 이벤트가 발생한 즉시 그 사실을 알 수 있습니다.
  3. Git clone
    • Jenkins는 지정된 Github 저장소를 클론하여 최신 소스코드를 가져옵니다.
  4. BE-Build
    • Jenkins는 도커 환경에서 Spring 기반의 백엔드 애플리케이션을 빌드하여 .jar 파일을 생성합니다.
  5. FE-Build
    • React 기반의 프론트엔드 애플리케이션도 마찬가지로 빌드하여 정적 파일(JS 파일, ...)을 생성합니다.
  6. BE-Deploy (백엔드 배포)
    • Jenkins는 백엔드의 빌드된 .jar 파일을 AWS EC2 인스턴스로 전송합니다.
    • 해당 EC2 인스턴스에서 deploy.sh 스크립트를 실행하여 .jar 파일을 실행합니다.
  7. FE-Deploy (프론트엔드 배포)
    • Jenkins는 프론트엔드의 빌드 파일을 AWS EC2 인스턴스로 전송합니다.
    • 해당 EC2 인스턴스에서 deploy.sh 스크립트를 실행하여 빌드된 파일을 실행합니다.