본문 바로가기
젠킨스 (Jenkins)

1. Jenkins 란?

by 실짱 2024. 3. 14.

Jenkins 같은 녀석들을 CI/CD 도구라고 부른다.

CI/CD 는 뭐야..?? (구축하다보면, 산넘어 산이다.. 이걸 하고 싶은데 이걸 하기 위해서는 또다른 무언가를 알아야 되고, 또다른 무언가를 알기 위해서는 또또다른 무언가를 알아야 되고.. 하…..)

 

CI (Continuous Integration)

한글로 “지속적 통합” 이라고 한다. (대부분이 그렇듯이 한글로 바꾸면 없어보인다)

위키에 잘 설명되어 있다. (위키백과: 지속적 통합)

 

한줄 정의 : 모든 개발자가 소스를 받았을때 에러 없는 상태의 소스코드를 관리하는 것

 

팀원이 많아질수록 코드의 변경량이 많아지고, 누군가가 일일이 감시하지 않는한 문제가 되는 코드가 들어올수밖에 없다.

이를 사람이 일일이 모니터링 하는것은 불가능하다.

CI는 개발자가 서버에 수정사항을 반영하기전에 내 코드가 문제를 일으키지는 않는지 자동으로 살펴주는 프로세스다.

깊이 들어가면 한도끝도 없지만 SW개발에서 가장 기본적으로 “문제를 일으킨다”의 정의를 “빌드 에러를 낸다” 로 정의하는것에서 출발했다.

내 코드를 반영하기전에 최소한 빌드에러 없는 코드를 반영하는것이 목표였다.

그런데 개발자마다 개발 환경이 다 다르고 코드 베이스가 다르기때문에 내 로컬에서 빌드에러가 안난다고해서 다른 개발자한테서 빌드에러가 안난다는 보장은 없다.

그래서 통합적으로 빌드만을 관리해주는 서버를 만들고 개발자가 코드 반영전에 항상 이 빌드 서버의 확인을 받는 과정을 추가해주어 빌드에러 없는 깨끗한 서버 코드를 보장한다.

이 과정을 통해 서버의 코드는 최소한 빌드 에러는 없는 clean 한 상태를 유지시킬 수 있다.

 

CD (Continuous Delivery)

한글로 “지속적 배포” 다. (역시 한글은…..)

역시 Wiki 에 짧고 간결하게 잘 설명되어 있다. (위키백과:지속적 배포)

 

한줄 정의 : 언제든지 release 가능한 상태를 유지할 수 있도록 소스의 상태를 관리하는것을 의미한다.

 

SW는 시간이 지날수록, 코드 변화량이 많아질수록 runtime 에러, 오작동이 증가할 위험에 처할 수 밖에 없다.

표준화된 테스트 관리와 릴리즈 시스템을 통해서 이러한 human error 를 최소화시키는것이 근본 목표다.

 

CI 와 CD 는 분리된 개념이 아니다.

여러 개발자가 하나의 SW 를 개발하는 과정에서 발생할 수 밖에 없는 각종 human error 와 이상동작을

특정한 툴을 통해서 자동화시키는 것이 가장 큰 목표다.

 

<위키백과> CD 관련 다이어그램

Jenkins 의 유래

원래 이름은 Hudson 이었다.

일본인 Kohsuke Kawaguchi ( 위키백과: Kohsuke Kawaguchi )가 Sun Microsystems 에서 개발, 발표한 CI/CD 소프트웨어다.

Hudson 은 2005년에 첫 release 를 발표했고 무료로 배포되었다.

이후 2010년에 Oracle 이 Sun Microsystems 를 인수하고 이듬해인 2011년에 상표권 분쟁이 붙으면서 Jenkins 라는 새로운 이름으로 프로젝트명을 바꿨다.

이후 Hudson 은 Eclipse 재단에 기부되었지만 별다른 개발없이 2017년에 종료 수순을 밟게된다.

Jenkins 는 Oracle 에서 계속 개발되었고, 오늘날 가장 인기있는 CI/CD 툴중에 하나가 되었다.

위키백과 설명 : Jenkins (software)

Jenkins 홈페이지 :Jenkins

소스코드 : GitHub - jenkinsci/jenkins: Jenkins automation server

 

Hundson 이라는 이름은 Kohsuke Kawaguchi 가 오랜 시간 자주보던 강에서 유래되었다고 합니다. Hudson 은 뉴욕주를 통과하는데 아마도 Kawaguchi 가 뉴욕에서 살았었던거 같다.

이후 Oracle 이 Sun 을 인수하면서 이런저런 상표권 문제가 발생했고, 이 과정에서 Jenkins 라는 새로운 이름으로 바꾸었는데, 왜 이름이 Jenkins 인지는 명확하지는 않다.

다만 ChatGPT 는 아래처럼 답해준다.

  1. 호의적인 이미지: Jenkins라는 이름은 영감과 열정을 가져다줄 수 있는 호의적인 이미지를 가지고 있습니다. 이는 프로젝트가 개발자들의 생산성과 개발 환경을 개선하기 위해 만들어진 것임을 나타내고 있습니다.
  2. 쉬운 발음: Jenkins라는 이름은 발음이 쉽고 익숙하며, 전 세계적으로 사용하기에 적합합니다.
  3. 독창성: Jenkins는 기존에 사용되지 않았던 독특한 이름이기도 합니다. 이를 통해 프로젝트가 새롭고 독자적인 개념임을 강조할 수 있습니다.
  4. 호기심 유발: Jenkins라는 이름은 호기심을 자극하여 더 많은 사람들이 프로젝트에 관심을 가지고 참여하도록 유도할 수 있습니다.

 

그래서 Jenkins 는

소스관리툴 (Git등) 과 연동해서 자동화 시스템을 통해 소스의 품질을 유지해주는 CI/CD 툴이다.

 


Next >    2. Jenkins Install