SSAFY 2학기 공통 프로젝트를 진행하면서 완성한 기능들을 매번 수동 빌드하여 배포하는 과정이 너무 번거롭게 느껴졌다. EC2 서버에서 소스 코드를 pull 받고 build하고 배포하고 이러한 일련의 과정이 시간적인 측면에서 너무 아깝다고 생각되었고 업무 생산성을 향상시키기 위해 CI/CD가 필수적이라고 생각했다.
CI/CD의 많은 도구 중에 왜 Jenkins를 선택했을까 ❓
아래 3가지 키워드를 바탕으로 Jenkins를 선택하게 되었다.
취업, 확장성, 무료
1. 대부분의 채용 공고를 살펴보면 Jenkins 사용 경험을 요구하고 있다는 것을 확인했다. 추후, 기업에 들어가서 구성되어 있는 시스템을 파악하거나 기업의 성장에 조금이나마 기여하기 위해서는 Jenkins를 선택하는 것이 좋을 거 같았다.
2. Jenkins는 수 많은 플러그인들을 지원하는 것으로 알고 있다. 러닝 커브가 높다는 것이 단점이지만 배우고나면 확장성이 매우 넓다고 생각되어 선택하게 되었다.
3. Github, GitLab의 경우 일정 리소스를 사용하게 되면 돈을 지불해야 한다는 문제점이 있었다. 현재 백수의 신분으로써 추가적인 지출은 힘들 거 같아서 무료인 Jenkins를 최종 선택했다.
CI / CD 란 ❓
CI (Continuous Integration)
Continuous Integration 직역 그대로 지속적인 통합
일반적으로 다수의 개발자들이 프로젝트를 하게 되는데 각각 작성한 코드를 통합하는 과정
CI 과정에서 소스 코드에 오류가 있을 시 CI 과정에 실패하게 되어 조기에 이슈 사항 확인 가능
CI가 완료된 코드들은 에러가 없는 코드이므로 코드의 품질을 향상
Code -> Build -> Test 과정
CD (Continuous Delivery / Deployment)
Continuous Delivery 직역 그대로 지속적인 제공
코드가 배포가 가능한 상태로 만드는 것
Continuous Deployment 직역 그대로 지속적인 배포
코드가 자동적으로 배포가 될 수 있도록 만드는 것
CD를 통해 지속적으로 통합된 코드를 배포 가능 상태로 만들고 자동화하여 배포함으로써 업무의 효율성 향상
CI / CD 파이프라인
코드에 대해 사전 정의 된 작업을 수행하는 일련의 처리 단계
반복적인 작업을 자동화하여 업무의 효율성을 높이는 것
Jenkins의 대표적인 Plugins으로 Credentials Plugin, Git Plugin, Pipeline, Docker plugin and Docker Pipeline 존재
Pipeline DSL(Domain Specific Langage)로 작성
파이프라인 Section
Agent - Jenkins는 여러 명의 Slave node를 둘 수 있으며 명령을 내릴 수 있다.