CI/CD ?
- CI(Continuous Integration, 지속적인 통합)
- CI는 소프트웨어 개발 과정에서 개발자가 코드 변경 사항을 지속적으로 통합하는 것을 의미합니다.
- 여러 개발자가 동시에 코드를 변경하고 저장소에 업로드할 때, CI는 이러한 변경 사항을 자동으로 병합하고 빌드하여 코드 품질을 유지합니다.
- CI를 사용하면 개발자들은 코드 변경 사항이 프로젝트 전체에 미치는 영향을 쉽게 파악할 수 있으며, 오류를 빠르게 수정할 수 있습니다.
- CD(Continuous Deployment/Delivery, 지속적인 배포/전달)
- CD는 CI 이후에 이어지는 단계로, 자동으로 소프트웨어를 빌드하고, 테스트하여 배포 가능한 상태로 만들고, 이를 자동으로 배포하는 것을 의미합니다.
- CD를 사용하면 개발자들은 소프트웨어를 빠르게 고객에게 전달할 수 있으며, 프로덕션 환경에서 신뢰성 높은 소프트웨어를 유지할 수 있습니다.
GitHub Action 이란?
- GitHub Actions는 GitHub에서 제공하는
지속적인 통합(CI) 및 배포(CD) 도구
입니다. GitHub 저장소(repository)에서 발생하는 이벤트(예: 코드 변경, 새 브랜치 생성, 풀 리퀘스트)를 감지하고, 이에 대한 자동화된 작업(예: 코드 빌드, 테스트 실행, 배포)을 실행할 수 있습니다.
- 예를 들어, 코드 변경이 발생하면 GitHub Actions는 코드 빌드 및 테스트를 자동으로 실행하여 코드 변경 사항이 문제를 일으키지 않는지 확인할 수 있습니다. 또한, 풀 리퀘스트를 병합하면 배포 파이프라인을 자동으로 실행하여 변경 사항을 프로덕션 환경으로 배포할 수 있습니다.
- GitHub Actions는 다양한 프로그래밍 언어 및 프레임워크에 대한 빌드, 테스트 및 배포 작업을 지원하며, GitHub Marketplace에서 다양한 작업을 검색하고 사용할 수 있습니다. 이를 통해 개발자는 더욱 효율적으로 코드를 작성하고 배포할 수 있습니다.
- 장점
- GitHub와 밀접하게 통합되어 있어, 저장소(repository)와 연동하기 쉽습니다.
- 다양한 플랫폼에서 작동할 수 있습니다.
- 사용하기 쉽고, 설정하기 간단합니다.
- 무료로 사용할 수 있습니다.
- 단점
- Jenkins보다 기능이 적습니다.
- 비교적 최근에 출시되어, 생태계가 Jenkins보다는 작습니다.
- 로컬 서버에 설치하는 것이 아니라 클라우드 상에서 작동하기 때문에, 보안적인 이슈가 발생할 수 있습니다.
Jenkins 란?
- 소프트웨어 개발 프로세스에서
지속적인 통합(CI) 및 배포(CD)를 자동화하는 오픈 소스 도구
입니다. 즉, 개발자들이 코드를 작성하고 저장소(repository)에 업로드할 때마다, Jenkins는 자동으로 코드를 빌드하고 테스트를 실행하여 코드 품질을 유지하며, 이후에 코드를 자동으로 배포하는 일련의 작업을 수행합니다.
- 예를 들어, 개발자가 코드를 변경하고 저장소에 push하면 Jenkins는 자동으로 코드를 가져와 빌드하고, 테스트를 실행합니다. 이때, 코드에 문제가 있으면 Jenkins는 오류 메시지를 생성하여 개발자에게 알립니다. 그리고 코드가 문제없이 빌드 및 테스트가 완료되면, Jenkins는 코드를 배포하거나, 이후 단계를 수행하기 위해 다른 도구와 통합할 수 있습니다.
- Jenkins는 다양한 플러그인을 제공하여 다양한 프로그래밍 언어 및 프레임워크에 대한 빌드 및 배포 작업을 자동화할 수 있습니다. 또한, Jenkins는 지속적인 통합 및 배포에 대한 다양한 보고서와 통계를 제공하여 개발자들이 프로젝트의 진행 상황을 추적하고 개선할 수 있도록 지원합니다
- 장점
- 다양한 플러그인과 통합 기능이 많이 있어서, 매우 유연합니다.
- 비교적 오래된 도구이기 때문에, 큰 생태계와 커뮤니티가 형성되어 있습니다.
- 사용자 정의 가능한 파이프라인을 제공하며, 기능이 매우 풍부합니다.
- 단점
- 설치 및 설정이 복잡하고, 사용하기 어렵습니다.
- 서버에 로컬 설치해야 하기 때문에, 구축 및 유지 보수 비용이 발생할 수 있습니다.
- 무료 버전에서는 기능이 제한됩니다.
GitHub Action , Jenkins의 차이
GitHub Actions는 GitHub 플랫폼에서 직접 호스팅하고, 저장소와 통합되어 있는 편리한 CI/CD 도구이며, Jenkins는 독립적인 서버에서 호스팅하며, 풍부한 확장성과 커뮤니티를 제공하는 CI/CD 도구입니다.
-
호스팅: GitHub Actions는 GitHub 플랫폼에서 제공되며, 저장소(repository)와 통합되어 있습니다. 반면에 Jenkins는 독립적인 서버나 클라우드 환경에서 호스팅되며, 별도의 구성 및 설정이 필요합니다.
-
설정: GitHub Actions는 저장소 내에서 작성하고 구성할 수 있으며, YAML 구문을 사용하여 작업을 정의합니다. 반면에 Jenkins는 별도의 설정 인터페이스를 제공하며, 이를 사용하여 작업을 구성합니다.
-
확장성: Jenkins는 플러그인 시스템을 사용하여 다양한 빌드 및 배포 작업을 지원하며, 사용자 지정 플러그인도 개발할 수 있습니다. 반면에 GitHub Actions는 Marketplace를 통해 추가 작업을 검색하고 사용할 수 있지만, 사용자 지정 작업을 개발하는 것은 어렵습니다.
-
비용: GitHub Actions는 무료로 제공되는 사용량 제한이 있지만, Jenkins는 독립적으로 호스팅해야 하므로 서버 비용이 추가될 수 있습니다.
-
커뮤니티: Jenkins는 매우 큰 커뮤니티와 다양한 지원 리소스가 있습니다. 반면에 GitHub Actions는 상대적으로 새로운 도구이므로 커뮤니티와 지원 리소스가 제한적입니다.
-
Jenkins를 사용하였을때 WorkFlow
- GitHub Action을 사용하였을 때 WorkFlow
참고자료
[CI/CD] Jenkins 과 GitHub Actions의 개념, 차이점