Jenkins

유요한·2023년 12월 14일
0
post-thumbnail

CI/CD란?

CI/CD는 애플리케이션 개발 단계로부터 배포 때까지의 모든 단계를 자동화를 통해서 좀더 효율적이고 빠르게 사용자에게 빈번히 배포할 수 있는것을 말한다.

CI

테스트, 빌드, Dockerizing, 저장소에 전달하는 것까지 프로덕션 환경으로 서비스를 배포할 수 있도록 준비하는 프로세스, 지속적인 통합

CI의 방법

1. 코드 변경사항을 주기적으로 빈번하게 merge

오랜 기간 동안 개발을 진행하다가 한번에 merge를 한다면 많은 충돌이 일어날 것이다. 그렇기에, 가능한 작은 단위로 나누어서 주기적으로 빈번히 개발하고 계속해서 통합하여 나가는 것이 중요하다.

흐름을 보자면,

2. 통합 단계의 자동화

1번의 방법은 너무나 귀찮은 단점이 있다. 여기서 자동화를 사용한다면 귀찮은 작업을 줄일 수 있다.

자동화를 사용한 이후의 흐름

CI의 장점

  • 코드의 검증에 들어가는 시간이 줄어든다.
  • 개발 편의성이 증가한다.
  • 항상 테스트 코드를 통과한 코드만이 레포지터리에 올라가기 때문에, 좋은 코드 퀄리티를 유지할 수 있다.

CD

저장소로 전달된 프로덕션 서비스를 실제 사용자들에게 배포하는 프로세스, 지속적인 배포 deploy(배포)

CD를 적용한 후의 흐름

CD의 장점

  • 개발자는 배포보다는 개발에 더욱 신경 쓸 수 있도록 도와준다.
  • 개발자가 원클릭으로 수작업 없이 빌드, 테스트, 배포까지의 자동화를 할 수 있다.

만약 CI/CD를 하지 않는다면 위와 같은 작업을 매번 기능을 수정될 때마다 수작업을 적용시켜야하나 CI/CD를 적용하면 간단한 명령어 만으로 위와 같은 작업을 자동으로 수행

대표적인 것 : github action, jenkins 등이 존재
이러한 CI/CD의 논리는 DevOps 방식의 논리를 극한으로 끌어올리는 경우

왜 필요할까?

혼자가 아닌 수 많은 개발자가 코드를 합치고 배포를 계속해서 시스템 없이 수동으로 하면 다음과 같은 일이 발생할 수 있습니다.

  • 누가 마지막으로 배포했는데 본인 환경에서는 안됨
  • 에러 발생

이를 해결하기 위해서 CI/CD라는 개념이 나온 것입니다.


젠킨스

Jenkins는 오픈 소스 지속적 통합 지속적 배포 도구로, 개발자들이 소프트웨어를 개발, 테스트, 빌드하고 배포하는 프로세스를 자동화하는 데 사용됩니다. Jenkins는 다양한 플랫폼과 개발 언어를 지원하며, 소프트웨어 개발 생산성을 향상시키는 핵심 역할을 합니다.

Jenkins는 온프레미스 방식과 클라우드 방식 둘 다 제공하며, 여기서 온프레미스란 자체적으로 보유하고 있는 서버에 직접 설치하고 운영하는 방식을 뜻합니다.

위의 그림과 같이 VCS에서 특정 branch에 commit과 push가 되면 jenkins에서는 commit, build, test, stage, deploy 단계를 거쳐서 특정 서버에 배포가 되게끔 도와줍니다.

  • Java Runtime Environment에서 동작

  • 다양한 플러그인들을 활용해서 각종 자동화 작업을 처리할 수 있다.

  • AWS 배포, 테스트, 도커 빌드 등 할게 너무 많으니 각각의 컴포넌트들을 하나의 플러그인으로 모듈화를 해놓았는데 이를 활용하여 사용하면 된다.

  • 가장 핵심적인 파이프라인, 시크릿 키마저도 플러그인으로 동작시킬 수 있다.

  • 즉 일련의 자동화 작업의 순서들의 집합인 Pipeline을 통해 CI/CD 파이프라인을 구축한다.

  • 플러그인들을 잘 조합해서 돌아가게 하는 게 Pipeline이라고 할 수 있다.

Pipeline

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

특징

  • 오픈 소스
    Jenkins는 오픈 소스로 무료로 사용할 수 있으며, 전 세계적으로 커뮤니티에 의해 지속적으로 개발 및 업데이트되고 있습니다. 사용자는 소스 코드를 수정하여 자신의 요구에 맞게 커스터마이징할 수 있습니다.

  • 다양한 플러그인 지원
    Jenkins는 수많은 플러그인을 지원하여 다양한 개발 환경과 도구와 통합할 수 있습니다. 이로써 사용자는 자신의 프로젝트 요구 사항에 맞게 Jenkins를 확장할 수 있습니다.

  • 자동화
    Jenkins를 사용하면 빌드, 테스트, 배포 및 모니터링과 같은 작업을 자동화하여 개발자와 운영팀의 업무 효율성을 향상시킵니다. 지속적인 통합과 지속적 배포를 통해 빠른 소프트웨어 전달이 가능합니다.

기능

  • 빌드 자동화
  • 테스트 자동화
  • 코드 표준 준수 여부 검사 (정적 코드 분석)
  • Build Pipeline 구성 :프로젝트에 2개 이상 모듈이 있을 경우 참조 관계에 따라 순차적 빌드 가능
  • 다양한 인증 기반과 결합한 인증, 권한 관리 기능
  • 자동화된 배포 관리

장점

  • 프로젝트 표준 컴파일 환경에서 컴파일 오류 검출
  • 자동화 테스트 수행
  • 정적 코드 분석에 의한 코딩 규약 순수 여부 체크
  • 프로파일링 툴을 이용한 소스변경에 따른 성능 변화 감지
  • 결합 테스트 환경에 대한 배포 작업
profile
발전하기 위한 공부

0개의 댓글