CI/CD 툴 비교분석 - Jenkins vs Github Actions
2023. 6. 22. 16:35ㆍBackend

Jenkins
- 설정에 자신이 있다면 선택하기 좋음(깃허브 액션보다 복잡) -> 젠킨스 빌드를 위해 서버 하나를 띄어야 하므로 구성이 어려움
- 서버 설치 필요
- 작업 또는 작업이 동기화되어 배포하는 데 더 많은 시간이 소요
- 계정 및 트리거를 기반으로 하며, github 이벤트를 준수하지 않는 빌드를 중심으로 함
- 환경 호환성을 위해 도커 이미지에서 실행해야 함
- 캐싱 메커니즘 지원을 위해 플러그인을 사용할 수 있음
- 장애가 나서 서비스가 내려간다면 그동안 git webhook 이벤트를 받을 수 없음
- 깃허브에 접근하기 위해 자격증명을 위한 설정이 필요함
- JVM으로 인해 사용중이지 않을 때에도 메모리를 잡아먹으며 클라우드 환경에서는 불필요한 비용 발생
- 플러그인을 최신 상태로 유지해야 하며, 업데이트 하지 않을 경우 장애 발생할 수 있음
- 전 세계 많은 사람들이 사용하며 문서가 다양함
<Jenkins 사용 CI/CD 플로우>

- EC2 두 대 이용 -> 하나는 젠킨스 서버, 다른 하나는 도커를 설치해 프로젝트 실행 서버로 둠
1. 로컬에서 깃허브로 소스코드 push
2. github webhook으로 jenkins 빌드 트리거 설정
3. git clone 또는 pull
4. docker 파일 빌드
5. docker 파일을 docker hub 레포지토리에 push
6. 기존 실행 컨테이너 중지/삭제
7. 기존 이미지 파일 삭제
8. docker hub에서 새로운 이미지 pull 받고 실행

Github Actions
- 비교적 쉽게 빌드가 가능함
- 클라우드가 있으므로 별도의 설치(구성)가 필요없음
- 비동기 CI/CD 달성
- 모든 github 이벤트에 대한 작업을 제공하고 다양한 언어와 프레임워크를 지원함
- 모든 환경과 호환
- 캐싱이 필요한 경우, 자체 캐싱 메커니즘을 작성해야 함
- github 마켓 플레이스를 통해 공유 가능
- public은 무료이나 private repository에서는 요금 발생
- jenkins에 비해 문서가 없음
<Github actions 사용 CI/CD 플로우>

- S3에 코드를 저장하고 AWS CodeDeploy를 통해 빌드하고 EC2에 배포하는 방법
1. 특정 브랜치에 push, 또는 merge
2. github actions에서 push 또는 merge를 감지하고 정해진 action을 수행
3. update된 코드를 바탕으로 빌드/테스트를 수행
4. 코드를 압축해 zip 파일 생성
5. 압축한 zip 파일을 aws s3에 업로드
6. AWS Code Deploy에 배포 요청
7. Code Deploy가 S3에 업로드된 zip파일 받음(delivery)
8. 지정된 ec2 인스턴스에 애플리케이션 파일 전달
9. ec2 인스턴스에 쉘 스크립트 실행해 배포 완료
- 도커 이미지를 Github Container Registry를 이용해 빌드하고 ec2에 기존 이미지 삭제 후 새로운 이미지 올리는 방법
참고자료
https://velog.io/@uiop5487/Jenkins-CICD-Pipeline-%EA%B5%AC%EC%B6%95
https://rachel0115.tistory.com/entry/Github-Actions%EB%A1%9C-CICD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-EC2-S3-CodeDeploy
https://mean-ji.tistory.com/57