jenkins 개념

김승윤·2021년 10월 24일
0


jenkins를 설명하면 가장 먼저 나오는 단어는 CI/CD입니다.

CI/CD

CI

  • Continuous Integration
  • 모든 개발이 끝난 이후에 코드 품질을 관리하는 고전적 방식의 단점을 해소하기위해 나타난 개념
  • 말그대로 개발을 하면서 ‘코드에 대한 통합’을 ‘지속적’으로 진행함으로써 품질을 유지하자는 것

예를 들어 5명의 개발자가 참여하는 프로젝트가 있다고 가정해봅니다. git에 올라와있는 기본 틀이 잡혀있는 코드를 이용해 각자의 로컬 환경에서 작업을 시작합니다. 개발자들은 자신의 작업을 할뿐 한번도 중장저장소에 코드를 올리지 않고 개발이 끝났을때 5명의 개발자들이 모여 자신들이 개발한 코드를 통합하려면 어떤 일이 발생할까요?

이를 해결하는 방안으로 다음의 규칙은 어떨까요?

  1. 개발자들은 퇴근하기 전에 자신이 개발한 코드들을 중앙 저장소에 통합한다.
  2. 통합된 코드에서 본인의 코드가 작동하는지 확인한다.
  3. 제대로 빌드되는지 확인한다.
  4. 결과를 정리하고 에러를 확인한다.

프로젝트 시작부터 끝까지 이런 규칙들을 지키면 막판에 코드 통합문제는 크게 발생하지 않을것 같습니다.
하지만 이러한 방법들은 너무나도 귀찮다는 문제가 발생합니다.
git에 코드를 올리는것은 그렇다쳐도 코드 양이 많아질수록 테스트하는 시간도 길어지고 지루한 작업입니다. 그렇다면 git에 코드만 올리면 알아서 테스트, 빌드를 수행하고 결과값을 도출하는 프로그램이 있으면 좋지 않을까요? 여기서 자동화가 나옵니다.

CD

  • Continuous Deploy 또는 Delivery
  • 소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 지속적으로 관리하자는 개념

쉽게 생각하면 CD는 CI의 연장선입니다. 배포 이전 테스트와 빌드는 필수이기 때문에 CD가 되려면 CI가 선행되어야 합니다.
CI를 통해 개발중에 지속적으로 빌드오 테스트를 진행하고 이를 통과한 코드에 대해 테스트 서버와 운영 서버에 그 내용 곧바로 배보해 반영하는 것입니다. 지속적으로 테스트와 빌드가 이루어지면 배포 또한 지속적으로 이루어지게 됩니다.

Jenkins

jenkins는 소프트웨어 개발시 지속적으로 통합 서비스를 제공하는 툴입니다. CI 툴이라고도 합니다. 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 있는 저장소에 빈번히 업로드함으로써 지속적 통합이 가능하도록 해줍니다.

기능

  • 무료 오픈 소스
  • 다양한 운영 체제에 쉽게 설치
  • 파이프 라인 지원 구축
  • 워크 플로 플러그인
  • JUnit을 중심으로 구축 된 테스트 하네스
  • 쉬운 업그레이드
  • 빠른 릴리스주기
  • 간편한 구성 설정
  • 타사 플러그인을 사용하여 확장 가능

장점

  • 빌드 실패는 통합 단계 중에 캐시
  • LDAP (Lightweight Directory Access Protocol) 메일 서버를 사용하여 빌드 보고서 상태를 개발자에게 알림
  • Maven 릴리스 프로젝트는 간단한 단계로 자동화
  • 간편한 버그 추적
  • 자동 변경 사항은 알림과 함께 빌드 보고서에서 업데이트
  • 애자일 개발 및 테스트 기반 개발에서 지속적인 통합을 지원

효과

  • 코드품질 향상 : 조기에 잠재 결함을 발견하여 품질을 향상
  • 비용 절감 : 소스를 통합하고 테스트 하여 배포하는 일련의 과정을 자동화하여 작업비용을 삭감
  • 작업 정확성 향상 : 수동으로 해 온 작업의 절차를 자동으로 설정해 놓아 작업의 정확성을 확보할 수 있으며 시간도 절약

0개의 댓글