본문 바로가기

SW Dev Portfolio

Jenkins 는 무엇이여 자동 배포에 어떤 역할을 하는가 ?

반응형

Jenkins는 소프트웨어 개발에서 지속적 통합(CI) 및 지속적 배포(CD)를 자동화하는 오픈소스 자동화 서버입니다. 자동 배포 과정에서 Jenkins는 다음과 같은 중요한 역할을 수행합니다:

  1. 코드 변경 감지:
    • 소스 코드 저장소(예: Git)를 모니터링하여 변경사항을 감지합니다.
    • 변경이 감지되면 자동으로 빌드 프로세스를 시작합니다.
  2. 자동화된 빌드:
    • 코드를 컴파일하고 필요한 의존성을 해결합니다.
    • 빌드 스크립트를 실행하여 애플리케이션을 구성합니다.
  3. 테스트 자동화:
    • 단위 테스트, 통합 테스트, 성능 테스트 등을 자동으로 실행합니다.
    • 테스트 결과를 수집하고 보고합니다.
  4. 품질 검사:
    • 코드 품질 도구(예: SonarQube)를 통합하여 코드 품질을 검사합니다.
    • 정의된 품질 기준을 충족하지 않으면 배포를 중단할 수 있습니다.
  5. 아티팩트 생성:
    • 빌드된 애플리케이션을 배포 가능한 형태(예: WAR 파일, Docker 이미지)로 패키징합니다.
  6. 환경 설정:
    • 다양한 환경(개발, 스테이징, 프로덕션)에 대한 설정을 관리합니다.
    • 환경별로 다른 배포 프로세스를 자동화할 수 있습니다.
  7. 배포 자동화:
    • 생성된 아티팩트를 지정된 서버나 클라우드 환경에 자동으로 배포합니다.
    • Docker를 사용할 경우, Docker 이미지를 빌드하고 컨테이너를 배포합니다.
  8. 롤백 관리:
    • 배포 실패 시 자동 롤백을 수행할 수 있습니다.
    • 이전 버전으로의 신속한 복구를 지원합니다.
  9. 알림 및 보고:
    • 빌드 및 배포 프로세스의 성공/실패 여부를 팀에게 알립니다.
    • 상세한 로그와 보고서를 생성하여 문제 해결을 지원합니다.
  10. 파이프라인 관리:
    • 복잡한 배포 워크플로우를 파이프라인으로 정의하고 관리합니다.
    • 여러 단계의 배포 프로세스를 시각화하고 제어합니다.
  11. 보안 관리:
    • 배포 과정에서의 보안 검사를 자동화합니다.
    • 인증 및 권한 관리를 통해 배포 프로세스의 보안을 강화합니다.
  12. 플러그인 생태계:
    • 다양한 도구와의 통합을 위한 풍부한 플러그인을 제공합니다.
    • Docker, Kubernetes, 클라우드 서비스 등과의 연동을 지원합니다.

Jenkins를 사용하면 개발팀은 수동 작업을 최소화하고, 일관된 배포 프로세스를 유지할 수 있습니다. 이는 배포 주기를 단축시키고, 인적 오류를 줄이며, 개발 생산성을 크게 향상시킵니다. 특히 웹사이트 자동 생성 및 배포 시스템에서 Jenkins는 사용자의 요구사항 변경에 따른 지속적인 업데이트와 배포를 효율적으로 관리할 수 있게 해줍니다.

https://velog.io/@bbkyoo/Jenkins

 

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

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

velog.io

 

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

 

[ 내가 구현할려는 서비스 ] 

 

  1. 사용자 인터페이스:
    • AI 채팅을 통해 웹사이트 요구사항 수집
    • 생성된 웹사이트 미리보기 제공
    • "배포" 버튼 제공
  2. 백엔드 처리:
    • 사용자가 "배포" 버튼 클릭 시, 백엔드 서버에 배포 요청 전송
    • 백엔드에서 Jenkins API를 통해 배포 작업 트리거
  3. Jenkins 작업:
    • 사전 정의된 파이프라인 실행
    • 생성된 웹사이트 코드를 임시 저장소에 저장
    • Dockerfile 생성 (또는 미리 준비된 템플릿 사용)
    • Docker 이미지 빌드
  4. Docker 배포:
    • 빌드된 이미지를 컨테이너로 실행
    • 필요시 로드 밸런서 설정 업데이트
  5. 도메인 연결:
    • 자동 생성된 서브도메인 또는 사용자 지정 도메인 연결
  6. 배포 완료 알림:
    • 사용자에게 배포 완료 및 접속 URL 제공

이 시스템을 구현하기 위한 주요 고려사항:

  1. 보안:
    • 사용자 생성 코드의 안전성 검증
    • 배포 권한 관리 및 인증
  2. 리소스 관리:
    • 각 사용자 웹사이트에 대한 리소스 할당 및 제한
  3. 스케일링:
    • 다수의 동시 배포 요청 처리
    • 동적 리소스 할당
  4. 모니터링 및 관리:
    • 배포된 웹사이트의 상태 모니터링
    • 사용자별 관리 대시보드 제공
  5. 비용 관리:
    • 사용자별 리소스 사용량 추적
    • 필요시 과금 시스템 연동

-> 보안의 문제점 존재 

 

반응형